Trong ứng dụng MIDlet, giao diện người dùng được chia làm 2 loại:
- Giao
diện người dùng mức thấp: tạo thành bởi các lớp họ Canvas, GameCanvas
....; cho phép người lập trình tùy ý tạo nên giao diện theo ý của mình
(chủ yếu là bằng cách vẽ nên hoặc sử dụng ảnh tạo sẵn để bố trí).
- Giao
diện người dùng mức cao: tạo thành bởi các thành phần giao diện được
tạo sẵn trong J2ME (package javax.microedition.lcdui). Các thành phần
giao diện này giải quyết phần lớn nhu cầu giao tiếp giữa ứng dụng
MIDlet và người dùng với các điều khiển như: TextField,
StringItem(label), List .....
Với mỗi loại giao diện người
dùng, ta lại có các loại sự kiện cần xử lý riêng, chúng được gọi là Sự
kiện mức thấp và sự kiện mức cao. Trong bài viết này, tôi sẽ đề cập đến
Xử lý sự kiện trên các thành phần giao diện mức cao.
Có 2 loại sự kiện có thể xảy ra trên giao diện người dùng mức cao của
ứng dụng MIDlet: sự kiện trên các Command và sự kiện trên các Item.
Để xử lý sự kiện trên các Command:
ta cần thi hành giao diện CommandListener trong đó hiện thực hóa phương thức commandAction (Command, Displayable).
class CommandHandler implements CommandListener{
public void commandAction(Command c, Displayable d){
if (c==cmExit){
destroyApp(true);
notifyDestroyed();
}
}
}
Sau khi định nghĩa lớp xử lý sự kiện cho Command, ta cần đăng ký nó với
Form chứa Command bằng phương thức
setCommandListener(commandListenerObject)
f = new Form("ItemStateChange Example");
cmExit = new Command("Exit", Command.EXIT, 0);
....
//Them Command va dang ky lang nghe su kien cho Command
f.addCommand(cmExit);
f.setCommandListener(new CommandHandler());
Các sự kiện trên các thành phần giao diện còn lại (TextField, Gauge,
List, ChoiceGroup, .....) xảy ra khi trạng thái hay giá trị của chúng
bị thay đổi. Để xử lý loại sự kiện này ta cần thi hành giao diện
ItemStateListener trong đó hiện thực hóa phương thức
itemStateChange(Item )
class ItemHandler implements ItemStateListener{
public void itemStateChanged(Item item){
if (item == tf){//nếu sự kiện xảy ra trên tf
si.setText(String.valueOf(tf.getString().length()));
}
}
}
Sau khi định nghĩa lớp xử lý sự kiện cho Item, ta cần đăng ký nó với
Form chứa Item bằng phương thức
setItemStateListener(itemStateListenerObject)
f = new Form("ItemStateChange Example");
tf = new TextField ("Input:","", 30, TextField.ANY);
si = new StringItem("Length", "0");
.....
f.append(tf);
f.append(si);
.....
//dang ky lang nghe su kien tren cac Item
f.setItemStateListener(new ItemHandler());
Download file ví dụ: ItemStateChangeEx.java