KBOX 採用 MVC2 架構:
View:KGameCanvas、KForm 等可視元件。
Controller:ActionController 單例,接收鍵盤/命令事件,依配置檔分派至 Action。
Model:開發者自訂業務邏輯類別。
配置檔:鍵值對映射 CMD.id.ACTION=package.ActionClass、KEY.canvasId.FIRE.ACTION=...。
public class TestMIDlet extends MIDlet {
protected void startApp() throws MIDletStateChangeException {
ActionController ctrl = ActionController.getInstance(true); // true=啟用 debug
ctrl.registerViewer(this);
MyKGameCanvas canvas = new MyKGameCanvas("MAIN");
KCommand btn = new KCommand("測試", Command.HELP, 1, "MYCMD", null);
canvas.addCommand(btn);
canvas.setCommandListener(ctrl);
Display.getDisplay(this).setCurrent(canvas);
}
// pauseApp/destroyApp...
}
public class MyKGameCanvas extends KGameCanvas {
public MyKGameCanvas(String id) { super(id); }
public void showMsg(String msg) {
Graphics g = getGraphics();
g.setColor(0xFFFFFFFF); g.fillRect(0,0,getWidth(),getHeight());
g.setColor(0xFF000000); g.drawString(msg, 0,0, Graphics.TOP|Graphics.LEFT);
flushGraphics();
}
}
public class TestAction implements Action {
public void execute(KCommand cmd, Item item, Displayable dis,
ActionForward forward, Hashtable params) {
MyKGameCanvas c = (MyKGameCanvas) dis;
c.showMsg("Hello from " + c.getUniqueID() + " cmd=" + cmd.getUniqueID());
}
}
DEBUG=true
CMD.MYCMD.ACTION=action.TestAction
KEY.MAIN.FIRE.ACTION=action.TestKeyAction
| 組件 | 說明 |
|---|---|
KGameCanvas | 繼承 GameCanvas,重寫 keyPressed/Released 實作按鍵重複觸發靈敏度設定,解決原生長按延遲問題。 |
KCommand | 擴充 Command,新增 uniqueID、Hashtable params,支援配置檔映射與參數傳遞。 |
Action | 單方法介面 execute(...),任意 POJO 實作即可成為 Action。 |
ActionForward | 封裝導向資訊(下一個 View ID、參數),Action 回傳給 Controller 執行畫面切換。 |
DEBUG=false,否則誤觸未定義鍵會彈出錯誤頁影響體驗。new KCommand("詳情", Command.SCREEN, 1, "DETAIL", params),params.put("itemId", "123"),Action 取出處理。forward.setViewId("DETAIL"),Controller 自動實例化並切換。Interceptor 介面,在 Action 前後注入通用邏輯(登入檢查、日誌、交易)。kbox 套件複製至專案 src。kbox.properties 放於 src 根目錄(WTK 會打包進 JAR)。KBOX 以 < 50 KB 核心體積為 J2ME 帶來 Spring MVC 風格的開發體驗,配合除錯模式大幅降低真機除錯成本,適合中大型專案採用。