public class TestMIDlet extends MIDlet{
…
protected void startApp() throws MIDletStateChangeException {
ActionController controller = ActionController.getInstance(true);
controller.registerVIEwer(this); //Register the MIDlet
MyKGameCanvas mgc = new MyKGameCanvas("MYGC"); //Create a GameCanvas
KCommand kc = new KCommand("TEST BUTTON", Command.HELP,1,"MYCMD",null);
mgc.addCommand(kc);
mgc.setCommandListener(controller);
Display.getDisplay(this).setCurrent(mgc);
}
…
}
創建一個Canvas:public class MyKGameCanvas extends KGameCanvas{
public MyKGameCanvas(String uniqueID) {
super(uniqueID);
}
public void showString(String string){
Graphics g = this.getGraphics();
g.setColor(0xFFFFFFFF);
g.fillRect(0, 0, this.getWidth(), this.getHeight());
g.setColor(0xFF000000);
g.drawString(string, 0, 0, Graphics.TOP|Graphics.LEFT);
this.flushGraphics();
}
}
創建相應的Action:
public class TestAction implements Action{
public void excute(KCommand cmd, Item item, Displayable dis, ActionForward forward,Hashtable parameters) {
MyKGameCanvas mkc = ((MyKGameCanvas)dis);
mkc.showString("hello world! From "+mkc.getUniqueID()+"."+cmd.getUniqueID());
}
}
將按鈕事件注冊給Action:
DEBUG=true //open the debug model of KBOX
CMD.MYCMD.ACTION=action.TestAction
注意這裡的MyKGameCanvas 繼承的KGameCanvas,而不是GameCanvas。KBOX的KGameCanvas類繼承自GameCanvas,當並沒有使用 GameCanvas那種使用線程監聽狀態的模型,而是重寫了keypressed等方法來處理鍵盤事件。另外,KGameCanvas的重寫的按鈕事件 的處理已經實現了重復按鍵情況,而且可以指定重復按鍵的靈敏度,這點是非常好用的:)
KCommand是KBOX擴展的按鈕組件。
KCommand kc = new KCommand("TEST BUTTON", Command.HELP,1,"MYCMD",null);
第一個參數是按鈕的名字,第二參數是按鈕類型,第三個參數是優先級,第四個參數是ID名,用於配置文件的映射,對應“ CMD.MYCMD.ACTION=action.TestAction”中的MYCMD,第五個參數是可傳遞參數,是一個Hashtable類型,用於向Action傳遞參數(當然你喜歡的話,也可以將參數提到配置文件裡去……)。
KBOX的Action是一個只有execute方法的接口,任何類只要實現了該接口,都可以是一個Action。
注冊一個鍵盤事件一樣很簡單:
public class TestKeyAction implements Action{
public void excute(KCommand cmd, Item item, Displayable dis, ActionForward forward,Hashtable parameters) {
MyKGameCanvas mkc = ((MyKGameCanvas)dis);
…
Do your business here.
..
}
}
指定鍵盤事件的處理Action
DEBUG=true //open the debug model of KBOX
CMD.MYCMD.ACTION=action.TestAction
KEY.MYGC.FIRE.ACTION=action.TestKeyAction…
KBOX的另外一個很實用的特性是DEBUG MODEL。
這個功能是用於在真機測試時,調試BUG用的。由於真機與模擬器不一定相同,當真機上拋出異常(真機上的異常無法察覺,沒有控制台啊!),而模擬器又一切正常的時候,這個功能就有用了:KBOX將捕獲到的異常的用一個ERROR PAGE顯示出來。不過注意在發布JAR包時,記得要去掉這個DEBUG模式,否則沒事按到個沒定義的鍵盤按鍵都會捕獲到未定義按鍵處理的異常……
要打開DEBUG模式需要在配置文件上指定DEBUG=true。