6. [LT] Form và 1 số đối tượng trên Form

Bài này sẽ hướng dẫn các bạn tìm hiểu cách sử dụng một số đối tượng trên Form. Nó không thể hiển thị độc lập nên phải add nó lên 1 đối tượng nào đó cấp cao hơn thì mới hiển thị được. Bắt đầu thôi:
1. StringItem: In văn bản lên Form
-Khái niệm: StringItem: là chuỗi mà ta gán lên form và cho hiển thị ra ngoài màn hình.
-Cấu trúc:
StringItem si=new StringItem("tên","nội dung cần hiển thị");
-Các thao tác với StringItem:
:icon-126:si.getText(); lấy nội dung của nó.
:icon-126:si.setText("nội dung"); đặt nội dung cho nó.
:icon-126:si.getLabel(); lấy tiêu đề.
:icon-126:si.setLabel("tiêu đề mới");đặt tiêu đề cho nó.
-StringItem khá đơn giản, bạn chỉ cần thực hành vài lần là hiểu.

stringitem.java


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class stringitem extends MIDlet{
Form f=new Form("tên form");
StringItem si=new StringItem("chuỗi","Văn bản");//Khai báo StringItem
Display d=Display.getDisplay(this);
public void startApp(){
f.append("\nDòng này viết ra mà không cần StringItem");
f.append(si);//add StringItem lên Form f
d.setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean uncon){}
}
-Projects: stringitem.zip

2. TextField: Khung nhập văn bản
-Khái niệm: TextField: Hiểu đơn giản nó là 1 khung nhập văn bản, tương tự như khung đăng nhập vậy.
-Cấu trúc:
TextField tf=new TextField("tên","nội dung",số kí tự tối đa, kiểu);
-Một số thao tác với TextField:
:icon-126:tf.getString(); lấy nội dung của TextField
:icon-126:tf.setString("nội dung mới"); đặt nội dung TextField
-Các kiểu TextField:
0 : Nhập gì cũng được.
1 : Chỉ nhập dạng email.
2 : Chỉ nhập được số.
3 : Nhập SĐT.
4 : Nhập URL.
5 : Chỉ nhập số thập phân.
65536: Nhập vào dạng password.
131072 : Nhập vào nhưng không sửa được.
-TextField cũng khá đơn giản, bạn nên thực hành vài lần là hiểu.

textfield.java


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class textfield extends MIDlet{
Form f = new Form("tên form");
TextField tf = new TextField("Nhập văn bản:", null, 500, 0);//null là không có gì(trống), số kí tự tối đa là 500 và nhập gì cũng được
Display d = Display.getDisplay(this);
public void startApp(){
f.append(tf);//gán TextField lên Form
d.setCurrent(f);//Hiển thị Form f
}
public void pauseApp(){}
public void destroyApp(boolean uncon){}
}
-Projects: textfield.zip

3. Ticker - Dòng chữ chạy ngang
-Khái niệm: Ticker : là 1 dòng chữ chạy ngang từ phải qua trái. Lưu ý là dù đặt nó ở vị trí nào trên form thì nó vẫn chạy ở phía trên màn hình(trên các items khác).
-Cấu trúc: Ticker tk = new Ticker("nội dung");
-Khác với StringItem và TextField sử dụng lệnh append() để gắn lên form, Ticker sử dụng lệnh setTicker() để gắn lên form. Nguyên do thì hỏi nhà sản xuất nhá.
-Một số thao tác với Ticker:
:icon-126:tk.getString(); lấy nội dung của Ticker tk. :icon-126:tk.setString("nội dung mới"); đặt nội dung mới cho Ticker tk.
-Ticker rất đơn giản, chỉ cần làm 1 lần là hiểu rồi.

ticker.java


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ticker extends MIDlet {
Form f = new Form("tên form");
Ticker tk = new Ticker("Nội dung");Khai báo Ticer
Display d = Display.getDisplay(this);
public void startApp() {
f.setTicker(tk);gắn Ticker lên Form
f.append("Dù bạn gắn Ticker lên vị trí nào trên Form thì nó vẫn luôn chạy ở phía trên màn hình");
d.setCurrent(f);
}
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
}
-Projects: ticker.zip

4. Command - nút bấm
-Khái niệm: Command : được hiểu đơn giản là khi nhấn phím thì sẽ có hành động xảy ra do ta cài đặt từ trước. Command chỉ giới hạn trong 1 số phím nhất định chứ không được như ketPressed(), keyReleased(),...thao tác được trên toàn bộ bàn phím. Vấn đề này đến những bài sau chúng ta sẽ tìm hiểu. Bây giờ chú tâm vào Command cái đã:
-Cấu trúc: Command ten=new Command("tên nút", kiểu, vị trí);
-Các kiểu Command: Số trong ngoặc đó là dạng viết tắt.
:icon-126: Command.SCREEN (1)
:icon-126: Command.BACK (2)
:icon-126: Command.CANCEL (3)
:icon-126: Command.OK (4)
:icon-126: Command.HELP (5)
:icon-126: Command.STOP (6)
:icon-126: Command.EXIT (7)
:icon-126: Command.ITEM (8)
-Các lệnh:
:icon-126: f.addCommand(tên Command); //Thêm Command vào Form
:icon-126: f.removeCommand(tên Command); //Xóa Command khỏi form
-Command hơi phức tạp, bạn nên luyện tập nhiều lần cho đến khi thành thạo. Để hiểu rõ hơn, tôi sẽ hướng dẫn viết 1 đoạn code ngắn sử dụng: 2 Form và 3 Command. Ở Form 1 ta gắn Command thoát app và Command next form(từ form 1 chuyển sang form 2) và 1 Command back form(từ form 2 về form 1). Code như sau:

command.java

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class command extends MIDlet implements CommandListener {
Muốn sử dụng được Command thì khi khai báo class bắt buộc phải implements CommandListener
Form f1 = new Form("Form 1");
Form f2 = new Form("Form 2");
Command ok = new Command("Next", 4, 0);//Command ở phím giữa (phím OK)
Command back = new Command("Back", 2, 0);//Command ở phím mền phải
Command exit = new Command("Thoát", 7, 1);//Command này cũng ở phím mền phải
Display d = Display.getDisplay(this);
public void startApp() {
f1.append("Đây là form 1, nhấn phím OK để qua form 2, nhấn phím mền phải để thoát.");
f1.addCommand(ok);
f1.addCommand(exit);
//Gắn Command ok và exit lên Form f1
f1.setCommandListener(this);//lệnh cho phép Command hoạt động ở Form f1, không có lệnh này thì Command ở f1 sẽ không sử dụng được.
f2.append("Đây là form 2, nhấn phím mền phải để về form 1");
f2.addCommand(back);
f2.setCommandListener(this); //Gắn Command back lên Form f2 và cho phép nó hoạt động
d.setCurrent(f1);//Hiển thị Form f1 lên mhình
}
public void pauseApp() { }
public void destroyApp(boolean unconditional) {
notifyDestroyed();//Thoát và giải phóng bộ nhớ
}
public void commandAction(Command cm, Displayable da) {
//Đây là hàm điều khiển Command
if (cm == ok) d.setCurrent(f2);//Nếu nhấn Command ok thì hiển thị Form f2
if (cm == exit) destroyApp(true);//Nếu nhấn Command exit thì thoát app
if (cm == back) d.setCurrent(f1);//Nếu nhấn Command back thì hiển thị Form f1
}
}
-Giải thích về Displayable. Đây là tham số trong hàm commandAction(), có thể hiểu Displayable là màn hình hiện tại. Vì trong ví dụ trên mỗi Command chỉ gắn duy nhất trên 1 Form nên ta không cần quan tâm cái này. Nhưng nếu add lên nhiều Form thì phải sử dụng để tránh bị lỗi khi test app. Ví dụ:
if(cm==ok && da==f1)d.setCurrent(f2); //nếu nhấn Command ok và màn hình hiện tại ở Form f1 thì hiển thị Form f2.
Tương tự:
if(cm==back && da==f1)d.setCurrent(f2);
-Projects: command.zip

5. Image - Lớp xử lí hình ảnh
-Khái niệm: Image dùng để hiển thị hình ảnh, nó có thể dùng cho Form hoặc Canvas.
-Cấu trúc khai báo:
Image im;
sau đó mới dùng khối lệnh try...catch..:
try{
im=Image.createImage("/icon.png");
}
catch(Exception e){}

-Lưu ý: /icon.png ở đây là đường dẫn tới ảnh. Ảnh phải được nén vào cùng với file class mà thư mục META-INF. Nếu trong file game ta nén đó, có thêm 1 thư mục bất kì như "anh" và hình ảnh đó ta để vào thư mục này thì ta chỉ cần khai báo đường dẫn tới ảnh là: /anh/icon.png
-Đoạn code dưới sẽ giúp bạn hiểu rõ hơn. Tuy nhiên, ảnh ở Form không thể điều chỉnh căn lề nên bạn chỉ cần xem để biết thôi, nó cũng không có tác dụng gì nhiều khi ở trên Form.

image.java


import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class image extends MIDlet {
Form f = new Form("Logo");
Image im;
Display d = Display.getDisplay(this);
public image() {
try {
im = Image.createImage("/icon.png");
}
catch(Exception e) { }
}
public void startApp() {
f.append(im);//gắn ảnh lên Form f
f.append("Đây là main logo của wap!");
d.setCurrent(f);
}
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
}

-Projects: image.zip


-Trên đây mình đã hướng dẫn về Form và 1 số đối tượng trên Form. Vẫn còn 1 số đối tượng khác nữa nhưng các bạn tạm thời chỉ cần tìm hiểu mấy cái trên là được rùi...