Layout
public void
setItemStateListener(ItemStateListe
MIDlet Form Command › CommandListener › ItemCommadListener Item
Lớp Command biểu diễn mặc ngữ nghĩa của một hành động
Hành động được thực thi trong đối tượng CommandListener
CommandListener được kết hợp với một Displayable hoặc Item
Một khi Command được gọi –
CommandListener được gọi, và hành động đucợ thực thi.
Command label
› public String getLabel()
Command type
› public int getCommandType()
Command priority
Đối tượng này là bộ lắng nghe các Command được đưc vào một
Displayable
public void
commandAction(Command c, Displayable d)
Khi một Command (được đưa vào một Item) được gọi, ứng dụng được thông báo có commandAction() được gọi
trong ItemCommandListener public void
MIDlet Form Command › CommandListener › ItemCommandListener Item
Lớp cha của các thành phần có thể được thêm vào Form.
Tất cả các đối tượng Item có một trường label
Layout, size, và appearance Thêm vào các Command
public void
setDefaultCommand(Command cmd)
public void
setItemCommandListener(ItemCommandL
istener listener)
public void notifyStateChanged() public int getPreferredWidth()
› Bước 1: Download sun’s J2ME Wireless Toolkit từ: Wireless Toolkit từ:
http://java.sun.com/products/j2mewtool kit/download-2_1.html
› Bước 2: Kiểm tra J2SE SDK đã được cài đặt được cài đặt
Shortcut trên menu Start:
Thư mục chứa
Chọn “File\New Project”
Nhập tên project và lớp MIDlet
Một thư mục mới chứa project sẽ tự động được tạo
J2ME/apps/{proj} source, resource, and binary files
J2ME/apps/{proj}/bin JAR, JAD, unpacked manifest files.
J2ME/apps/{proj}/lib external class libraries, (JAR or ZIP) for a specific project
J2ME/apps/{proj}/res resource files J2ME/apps/{proj}/src source files
Chọn platform Viết code Save Build (Compile + Preverify) Run
Eclipse
› Thiết kế theo mô hình platform
› Kiến trúc mơ cho phép gắn các plugin để
sử dụng các công cụ cần thiết
EclipseMe
› Plugin dành riêng cho phát triển ứng
dụng J2ME
› Thừa hương đầy đủ các tính năng của
Bước 1: Download tại địa chi
› Eclipse: http://www.eclipse.org
› EclipseME:
http://www.sourceforge.net/projects/eclipseme Bước 2: Kiểm tra yêu cầu
› Để chạy được EclipseME, cần phải có J2ME Wireless Toolkit (WTK) 1.0, JDK 1.4 và Eclipse 3.0M9 trơ lên.
Bước 3: Cài đặt EclipseMe
› Để cài đặt EclipseMe, chỉ cần giải nén file zip đến thư mục plugins của Eclipse
Bước 4: Khởi động Eclipse
› Menu Window -> Preferences. Mơ rộng mục J2ME, chọn mục Platform
Components.
› Trong khung bên phải, kích chuột phải vào mục Wireless Toolkits, kích vào Add
Wireless Toolkit.
› Cửa sổ hiện ra yêu cầu bạn chọn thư mục cài đặt WTK. Nhấn nút Browse và chọn thư mục WTK đã cài đặt.
› Nhất Finish rồi nhấn OK. Quá trình cài đặt và cấu hình đã hoàn tất.
Menu File -> New -> Project
Mở rộng mục J2ME, chọn J2ME MIDlet
Suite. Nhấn Next.
Gõ tên project (ví dụ HelloWorld) và chọn thư mục chứa project (ví dụ
C:\projects\J2ME). Nhấn Next.
Chọn nền WTK. Nhấn Next.
Có thể thêm các thư viện cần dùng, thêm thư mục chứa source v.v… Cũng có thể để mọi thứ theo mặc định.
Nhấn Finish để kết thúc quá trình tạo J2ME project.
Trong khung Navigator, kích chuột phải trên J2ME project (theo ví dụ ở trên là HelloWorld).
Chọn New -> Other.
Mở rộng mục J2ME, chọn J2ME Midlet. Nhấn Next.
Nhập tên gói chứa MIDlet trong mục package, ví dụ:
edu.eclipseme.helloworld
Nhập tên lớp MIDlet trong mục Name, ví dụ: HelloWorldMIDlet.
Nhấn Finish để kết thúc quá trình tạo MIDlet
Chương trình sẽ vẽ một dòng chữ Hello World in đậm màu đỏ ở giữa màn hình điện thoại.
Trước khi in dòng chữ, chương trình hiển thị một màn hình intro trong 30 giây với một hình ảnh dạng png
package eclipseme.HelloWorld;
import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Font; import
javax.microedition.lcdui.Graphics; public class HelloCanvas extends Canvas {
protected void paint(Graphics g) { clearScreen(g); paintHello(g); } private void clearScreen(Graphics g) { g.setColor(0xFFFFFF); g.fillRect(0, 0, getWidth(), getHeight()); }
private void paintHello(Graphics g)
{
String hello = "Hello World"; g.setColor(0xFF0000); Font font = Font.getFont(Font.FACE_SYSTE M, Font.STYLE_BOLD, Font.SIZE_MEDIUM); g.setFont(font); int x = (getWidth() - font.stringWidth(hello)) / 2; int y = (getHeight() - font.getHeight()) / 2; g.drawString(hello, x, y, Graphics.TOP | Graphics.LEFT); } }
package eclipseme.HelloWorld; import java.io.IOException; import java.util.Timer; import java.util.TimerTask; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; public class IntroCanvas extends Canvas{ private static final String logoName =
"/Images/image.png"; private Display display;
private Displayable nextScreen; private int timeout;
private Timer timer = new Timer();
public IntroCanvas(Display display, Displayable
nextScreen, int timeout){ this.display = display;
this.nextScreen = nextScreen;
this.timeout = timeout; }
public void startIntro(){
display.setCurrent(this); }
public void endIntro(){
display.setCurrent(nextScr een);
protected void paint(Graphics g) { try { Image logo = Image.createImage(logoNa me); g.drawImage(logo, 0, 0, Graphics.TOP | Graphics.LEFT); } catch (IOException e) { g.drawString("Logo Error", 0, 0, Graphics.TOP | Graphics.LEFT); } } protected void showNotify() { timer.schedule(new CountDown(), timeout); } protected void keyPressed(int keyCode) { endIntro();} private class CountDown
extends TimerTask { public void run()
{endIntro();} }
package eclipseme.HelloWorld; import javax.microedition.lcdui.Display; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletS tateChangeException;
public class HelloWorldMIDlet extends MIDlet {
private Display display;
private IntroCanvas introCanvas; private HelloCanvas helloCanvas; public HelloWorldMIDlet() {
super(); }
protected void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); helloCanvas = new HelloCanvas(); introCanvas = new IntroCanvas (display, helloCanvas, 3000); introCanvas.startIntro(); }
protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException {} }