1. 必須先安裝 NetBeans IDE 4.0 和 NetBeans Mobility Pack 4.0,然後才能開始進行 J2ME MIDP 開發。有關下載和安裝完整環境的說明,請參見 J2ME MIDP 開發下載頁面http://www.netbeans.org/kb/articles/mobility_zh_CN.Html。 2. 創建 MIDP 應用程序 創建新的 J2ME MIDP 項目
2. 創建新的移動應用程序:
(1).選擇“文件”>“新建項目”(Ctrl-Shift-N)。在“類別”下選擇“移動”。在“項目”下選擇“移動應用程序”,然後單擊“ 下一步”。
(2). 在“項目名稱”下輸入 HuaRongDao。將項目主目錄更改為您系統上的任何目錄。從現在起,我們將該目錄稱為 $PROJECTHOME。
(3). 不要選中“創建 HelloMIDlet”復選框。單擊“下一步”。 選CLDC1.0 MIDP1.0,
(4). 將 J2ME Wireless Toolkit 作為選定的目標平台。
(5). 單擊“完成”。IDE 將創建 $PROJECTHOME./HuaRongDao 項目文件夾。該項目文件夾包含所有的源和項目元數據,如項目 Ant 腳本。此時將在“項目”窗口中打開 HuaRongDao 項目。
(6). 現在,我們來添加一個MIDlet, 右鍵單擊項目,選新建MIDlet,名字為HuaRongDao,不要寫package.點確定生成, 然後在生成後的 代碼裡加入CommandListener支持,代碼框架如下:
/* * HuaRongDaoMidlet.Java *
* Created on 2005年7月1日, 下午8:18
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/**
*
* @author lin
* @version
*/
public class HuaRongDaoMidlet extends MIDlet implements CommandListener{
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d) {
}
3. 開始編碼
(1)加入退出按鈕,這裡,我們用TextBox這種高級UI來做例子:
public class HuaRongDaoMidlet extends MIDlet implements CommandListener{
private Display display;
private final static Command CMD_EXIT = new Command("退出", Command.EXIT, 1);
public HuaRongDaoMidlet(){
display = Display.getDisplay(this);
}
public void startApp() {
TextBox t = new TextBox("TextBox的第一個參數","TextBox的第二個參數",256,0);
t.addCommand(CMD_EXIT);
t.setCommandListener(this);
display.setCurrent(mainList);
}
......
public void commandAction(Command c, Displayable d) {
if (c == CMD_EXIT) {
destroyApp(false);
notifyDestroyed();
}
}
}
注重:A.關於j2me的api函數,可以在WTK的docs目錄當中查到。
B.我們使用的是MIDP1.0的函數,2.0支持游戲函數,但是大部分原先的手機都不支持。
C.TextBox是可輸入框,有標題,缺省內容和內容長度等參數。
(2)創建一個處理圖片的類Images, 處理圖片的方式在2.0當中有了很大的改進,可以直接從一張圖片中按照坐標取一部分,但是1.0
還沒有這個功能,所以我們使用Image數組來實現。
首先,我們先來顯示一個圖片,來熟悉一下有關image的操作。首先,加入一個Image和包含它的ImageItem,因為Image本身不能顯示,
必須包在ImageItem中,然後創建一個Form,把ImageItem加到Form中,最後在屏幕上顯示這個Form。
public void startApp() {
Image a;
ImageItem i;
Form props = new Form("測試頁");
try
{
a = Image.createImage("/Duke.png");
i = new ImageItem("java吉祥物",a,ImageItem.LAYOUT_DEFAULT,"圖片無法顯示");
props.append(i);
}
catch (IOException e)
{
a = null;
}
props.addCommand(CMD_EXIT);
props.setCommandListener(this);
display.setCurrent(props);
}
編譯運行一下,發現沒有圖片,說明或者是指定的圖片位置不對或者是系統沒有找到,其中,createImage()中的文件路徑是關於項目
根目錄/res/的,沒有錯,因此是系統沒有找到res目錄。 File"HuaRongDao"property,選擇Libraries and Resources,把res的完
全路徑加進去,再編譯就可以了。
好了,測試成功了,現在可以開始編寫Images類,如下:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
/**
*
* @author lin
*/
public class Images {//保存常量
//繪圖位置常量
public static final int UNIT = 20;//方塊的單位長度
public static final int LEFT = 20;//畫圖的左邊界頂點
public static final int TOP = 22;//畫圖的上邊界頂點
//地圖位置常量
public static final int WIDTH = 4;//地圖的寬度
public static final int HEIGHT = 5;//地圖的高度
//地圖標記常量
public static final byte CAOCAO = (byte) 'a'; //曹操的地圖標記
public static final byte MACHAO = (byte) 'b';//馬超的地圖標記
public static final byte HUANGZHONG = (byte) 'c';//黃忠的地圖標記
public static final byte GUANYU = (byte) 'd';//關羽的地圖標記
public static final byte ZHANGFEI = (byte) 'e';//張飛的地圖標記
public static final byte ZHAOYUN = (byte) 'f';//趙雲的地圖標記
public static final byte ZU = (byte) 'g';//卒的地圖標記
public static final byte BLANK = (byte) 'h';//空白的地圖標記
public static final byte CURSOR = (byte) 'i';//光標的地圖標記
//地圖組合標記常量
public static final byte DLEFT = (byte) '1'; //組合圖形左邊標記
public static final byte DUP = (byte) '2'; //組合圖形上邊標記
public static final byte DLEFTUP = (byte) '3'; //組合圖形左上標記
//圖片常量
//public static Image image_base;//基本圖片
public static Image image_Zhaoyun;//趙雲的圖片
public static Image image_Caocao;//曹操的圖片
public static Image image_Huangzhong;//黃忠的圖片
public static Image image_Machao;//馬超的圖片
public static Image image_Guanyu;//關羽的圖片
public static Image image_Zhangfei;//張飛的圖片
public static Image image_Zu;//卒的圖片
public static Image image_Blank;//空白的圖片
public static Image image_Frame;//游戲框架的圖片
public Images() {//構造函數
}
public static boolean init() {//初始化游戲中用到的圖片
try {
/* 以下的實現都是基於MIDP2.0的,我們在程序中采用的是基於MIDP1.0的實現
image_base = Image.createImage("/huarongroad/BITBACK.png");
image_Frame = Image.createImage(image_base, 126, 0, 145, 177,Sprite.TRANS_NONE);
//Sprite類是用來翻轉圖片的,是MIDP2.0新新增加的支持游戲的特性
image_Zhaoyun = Image.createImage(image_base, 0, 0, UNIT, 2 * UNIT,Sprite.TRANS_NONE);
image_Caocao = Image.createImage(image_base, UNIT, 0, 2 * UNIT,2 * UNIT, Sprite.TRANS_NONE);
image_Huangzhong = Image.createImage(image_base, 3 * UNIT, 0, UNIT,2 * UNIT,Sprite.TRANS_NONE);
image_Machao = Image.createImage(image_base, 0, 2 * UNIT, UNIT,2 * UNIT,Sprite.TRANS_NONE);
image_Guanyu = Image.createImage(image_base, UNIT, 2 * UNIT,2 * UNIT, UNIT,Sprite.TRANS_NONE);
image_Zhangfei = Image.createImage(image_base, 3 * UNIT, 2 * UNIT,UNIT, 2 * UNIT,Sprite.TRANS_NONE);
image_Zu = Image.createImage(image_base, 0, 4 * UNIT, UNIT, UNIT,Sprite.TRANS_NONE);
image_Blank = Image.createImage(image_base, 1 * UNIT, 4 * UNIT,UNIT,UNIT,Sprite.TRANS_NONE);