Các thành phần giao diện ở mức cao của J2ME

tranhuyvc

Administrator
Staff member
21/1/10
6,248
229
63
Các thành phần giao diện ở mức cao của J2ME

1. Đối tượng Display, Displayable và Screens

Một ứng dụng MIDlet chỉ có 1 đối tượng thể hiện Display. Đối tượng này dùng để lấy
thông tin về đối tượng trình bày, ví dụ màu được hỗ trợ, và bao gồm các phương thức để
yêu cầu các đối tượng được trình bày. Đối tượng Display cần thiết cho bộ quản lý việc
trình bày trên thiết bị điều khiển thành phần nào sẽ được hiển thị lên trên thiết bị
Mặc dù chỉ có một đối tượng Display ứng với mỗi MIDlet, nhưng nhiều đối tượng
trong một MIDlet có thể được hiển thị ra trên thiết bị như Forms, TextBoxes,
ChoiceGroups, ..
Một đối tượng Displayable là một thành phần được hiển thị trên một thiết bị. MIDP
chứa 2 lớp con của lớp Displayable là Screen và Canvas. Hình dưới đây mô tả mối
quan hệ trên
Một đối tượng Screen không phải là một cái gì đó hiện ra trên thiết bị, mà lớp Screen
này sẽ được thừa kế bởi các thành phần hiển thị ở mức cao, chính các thành phần này
sẽ được hiển thị ra trên màn hình. Hình dưới đây sẽ mô tả mối quan hệ của lớp Screen
và các thành phần thể hiện ở mức cao.
Tóm lại, phần này chỉ giới thiệu hệ thống phân cấp đối tượng dùng để thể hiện giao
diện người dùng trong MIDP.

2.Thành phần Form và Items

Trong phần này sẽ giới thiệu các thành phần được hiển thị ra trên một Form. Một
Form chỉ đơn giản là một khung chứa các thành phần, mà mỗi thành phần được thừa kế
từ lớp Item. Chúng ta sẽ xem qua các thành phần hiển thị trên thiết bị trên:
• DateField
• Gauge
• StringItem
• TextField
• ChoiceGroup
• Spacer
• CustomItem
• Image and ImageItem

a) DateField

Thành phần DateField cung cấp một phương tiện trực quan để thao tác đối tượng
Date được định nghĩa trong java.util.Date. Khi tạo một đối tượng DateField, bạn cần
chỉ rõ là người dùng chỉ có thể chỉnh sửa ngày, chỉnh sửa giờ hay đồng thời cả hai.
Các phương thức dựng của lớp DateField gồm:
DateField(String label, int mode)
DateField(String label, int mode, TimeZone timeZone)
Các mode tương ứng của lớp DateField gồm:
DateField.DATE_TIME: cho phép thay đổi ngày giờ
DateField.TIME: chỉ cho phép thay đổi giờ
DateField.DATE: chỉ cho phép thay đổi ngày
Ví dụ:
private DateField dfAlarm;
// Tạo một đổi tượng DateField với nhãn, cho phép thay đổi cả ngày và giờ
dfAlarm = new DateField("Set Alarm Time", DateField.DATE_TIME);
dfAlarm.setDate(new Date());
Dưới đây là đoạn chương trình mẫu thử nghiệm đổi tượng DateField
import java.util.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.Timer;
import java.util.TimerTask;
public class DateFieldTest extends MIDlet implements ItemStateListener,
CommandListener
{
private Display display; // Reference to display object
private Form fmMain; // Main form
private Command cmExit; // Exit MIDlet
private DateField dfAlarm; // DateField component
Các thành phần giao diện ở mức cao
public DateFieldTest()
{
display = Display.getDisplay(this);
// The main form
fmMain = new Form("DateField Test");
// DateField with todays date as a default
dfAlarm = new DateField("Set Alarm Time", DateField.DATE_TIME);
dfAlarm.setDate(new Date());
// All the commands/buttons
cmExit = new Command("Exit", Command.EXIT, 1);
// Add to form and listen for events
fmMain.append(dfAlarm);
fmMain.addCommand(cmExit);
fmMain.setCommandListener(this);
fmMain.setItemStateListener(this);
}
public void startApp ()
{
display.setCurrent(fmMain);
}
public void pauseApp()
{ }
public void destroyApp(boolean unconditional)
{ }
public void itemStateChanged(Item item)
{
System.out.println("Date field changed.");
}
public void commandAction(Command c, Displayable s)
{
if (c == cmExit)
{
destroyApp(false);
notifyDestroyed();
}
}
}
-------
Huy đang cập nhật tiêp !
 

phongpc3

New Member
5/4/10
2
0
0
Ðề: Các thành phần giao diện ở mức cao của J2ME

Cố lên Huy ơi. Mình đang cần tất cả các lệnh trong J2ME, nếu có thì up cho mọi người tham khảo nha.
 

tranhuyvc

Administrator
Staff member
21/1/10
6,248
229
63
Ðề: Các thành phần giao diện ở mức cao của J2ME

Uh, có gì thì cùng chia sẻ nhé, Huy cũng mới begin with J2me thôi, chia sẻ những kinh nghiệm mình đang học thông qua nền tảng của J2se, hehe, các bạn nào nghiên cứu rồi, thì gửi những bải nâng cao dùm huy nhé, huy chỉ có thể lo báic thôi, hehe. cần chỉ giáo nhiều !
 

kentfithou

New Member
10/4/10
2
0
0
Ðề: Các thành phần giao diện ở mức cao của J2ME

Chào huy !
Bạn có tài liệu về lĩnh vưc lập trình đồ họa của J2ME cho mình với !
t4 này làm bài báo cáo về đề tài đó !
thanks bạn nhìu !
YH: kentfithou
Mail : yahoo mail hoac Tranhanh0321@gmai.com
 

nghiencuuJava

Member
18/3/10
216
0
16
Ðề: Các thành phần giao diện ở mức cao của J2ME

Bạn Huy cho mềnh hỏi muốn chạy những code này mềnh fai cài J2ME Wireless Toolkit phải ko bạn? hay phải dùng bộ công cụ gì?
 

chuotfx

Member
4/4/10
365
25
18
Ðề: Các thành phần giao diện ở mức cao của J2ME

http://www.mediafire.com/?rj3tzjzxiy2

đó là project mình viết các thành phần đồ họa trong Screen,chạy trên netBean,còn nếu dùng eclipse thì tạo project mới và copy hết các file vào src mà chạy từng cái 1

mấy cái này thì chĩ có viết nhiều mới thuộc đc,heheheheh
 

nghiencuuJava

Member
18/3/10
216
0
16
Ðề: Các thành phần giao diện ở mức cao của J2ME

Huy ui tạo cái class DateField này thế nào zị.Bạn có thể hướng dẫn mềnh từng bước dc ko?mềnh đc tự học cái này! thanks!
 

chuotfx

Member
4/4/10
365
25
18
Ðề: Các thành phần giao diện ở mức cao của J2ME

Huy ui tạo cái class DateField này thế nào zị.Bạn có thể hướng dẫn mềnh từng bước dc ko?mềnh đc tự học cái này! thanks!
Bước 1:tạo 1 class là MIDlet
Bước 2:tạo đối tượng là Form
Bước 3:tạo đối tượng là DateField ( vì muốn hiễn thị DateField thì bắt buộc phải đặt nó vào trong Form )
Bước 4: tạo xong thì phải new nó ra để có giá trị ( chính là contructor của nó )
Bước 5: append DateField vào Form
Bước 6: dùng đối tượng Display rùi setCurrent cho Form thì xong
 

nghiencuuJava

Member
18/3/10
216
0
16
Ðề: Các thành phần giao diện ở mức cao của J2ME

Project này fai có class HelloMIDlet + class DateFiled đúng ko bạn? Mềnh thử xoá class HelloMIDlet thì ko thấy class DateField.Cái class DateField này mềnh fai code bằng tay đúng ko bạn?Nó ko có hổ trợ kéo thả hả bạn?Mềnh muốn tạo lại class HelloMIDlet thì fai làm sao?Chẳng lẽ fai tạo lại project?
Sau khi làm xong chạy thử nó sẽ như thế này fai ko bạn? Sau đó mềnh chọn set Alarm time nhưng ko thấy chạy cái này?Nó còn thiếu cái j chăng?
 

chuotfx

Member
4/4/10
365
25
18
Ðề: Các thành phần giao diện ở mức cao của J2ME

cái đó là do bạn lúc tạo project bằng netbean đã kô bõ 2 cái tick là set main project và creater HelloMIDlet

còn kéo thả thì bạn new 1 file Vỉtual MIDlet trong netbean thì có kéo thả,kô nên lạn dụng nó

Lúc mình mới học cái này thì viết bằng notepad++ rùi dung wtk tạo project rùi copy file đó vào thư mục src của nó rùi build xong chạy,có kéo thả j đâu
 

hungtipo

New Member
15/4/10
4
0
0
Ðề: Các thành phần giao diện ở mức cao của J2ME

congdongjava !
giúp mình về cách dùng Polish để tạo giao diện với

pờ ly!
 

chuotfx

Member
4/4/10
365
25
18
Ðề: Các thành phần giao diện ở mức cao của J2ME

congdongjava !
giúp mình về cách dùng Polish để tạo giao diện với

pờ ly!
giao diện trên Polish là tùy chĩnh trong CSS chứ kô có tạo như J2ME thường,bạn build 1 vài ứng dụng để thấy
 

hungtipo

New Member
15/4/10
4
0
0
Ðề: Các thành phần giao diện ở mức cao của J2ME

giao diện trên Polish là tùy chĩnh trong CSS chứ kô có tạo như J2ME thường,bạn build 1 vài ứng dụng để thấy
ban có cái vi dụ nào cho mình hiểu hơn với ko :jimlad 3:
có đoạn code nào chẳn hạn ông thầy bắt làm đồ án = cái này :no 2:
 

toi.fithou

New Member
30/7/11
10
0
0
Help J2ME(RMS)

mọi người còn ai thức không nhỉ cho mình hỏi bài java này với. mình đang cần ghi dữ liệu từ một cái TextField txtNhap xuống RMS. Mà không hiểu sao nó không ghi được mọi người xem.
Code:
public class Demo_Swing_Mobile extends MIDlet implements CommandListener {
	private RecordStore rs=null;
	static final String SEC_STORE="db_3";
	private Display display;
	private Form frmMain;
	private Command cmOk, cmDoc;
	private TextField txtNhap, txtXuat;

	public Demo_Swing_Mobile() {
		display=Display.getDisplay(this);
		frmMain=new Form("Nhap xuat RMS");
		
		
		txtNhap = new TextField("Nhap vao:", null, 20, TextField.ANY);
		txtXuat = new TextField("Xuat:", null, 20, TextField.ANY);
		cmOk = new Command("OK", Command.OK, 0);
		cmDoc = new Command("Doc", Command.OK, 0);
		
		openRecord();
		closeRecord();
		deleteRecord();
		
		frmMain.append(txtNhap);
		frmMain.append(txtXuat);
		frmMain.addCommand(cmOk);
		frmMain.addCommand(cmDoc);
		frmMain.setCommandListener(this);
		display.setCurrent(frmMain);
	}



	protected void startApp() throws MIDletStateChangeException {

	}
	
	
	private void writerRecord() {
		String by=txtNhap.getString();
		byte[] bite=by.getBytes();
		try {
			rs.addRecord(bite, 0, bite.length);
			txtNhap.setString("");
		} catch (RecordStoreNotOpenException e) {
			e.printStackTrace();
		} catch (RecordStoreFullException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		}
		System.out.println("Ghi thanh cong");
		
	}



	private void deleteRecord() {
		/*try {
			rs.deleteRecordStore(SEC_STORE);
		} catch (RecordStoreNotFoundException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		}*/
	}



	private void closeRecord() {
		try {
			rs.closeRecordStore();
		} catch (RecordStoreNotOpenException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		}
	}

	private void readRecord() throws RecordStoreException {
		try {
			byte[] recData=new byte[50];
			int len;
			for(int i=1; i<=rs.getNumRecords(); i++)
			{
				
				len=rs.getRecord(i, recData, 0);
				System.out.println("Rec#"+i+":"+new String(recData, 0, len));
				
			}
		} catch (RecordStoreNotOpenException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		}
	}



	/*private void writerRecord(String str) {
		byte[] by=str.getBytes();
		try {
			rs.addRecord(by, 0, by.length);
		} catch (RecordStoreNotOpenException e) {
			e.printStackTrace();
		} catch (RecordStoreFullException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		}
		System.out.println("ghi thanh cong");
		
	}*/



	private void openRecord() {
		try {
			rs=RecordStore.openRecordStore(SEC_STORE, true);
		} catch (RecordStoreFullException e) {
			e.printStackTrace();
		} catch (RecordStoreNotFoundException e) {
			e.printStackTrace();
		} catch (RecordStoreException e) {
			e.printStackTrace();
		}
		
	}



	public void commandAction(Command c, Displayable d) {
		if(c==cmOk)
		{
			writerRecord();
			
			System.out.println("ghi");
		}
		else if(c==cmDoc)
		{
			try {
				readRecord();
			} catch (RecordStoreException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		destroyApp(false);
		notifyDestroyed();
	}

	protected void pauseApp() {	

	}

}
 

huanltgc00061

New Member
18/8/12
2
1
3
28
Các bạn ơi, cho mình hỏi muốn thiết kế giao diện đẹp trong j2me thì làm thế nào :-s
thanks các bác