MIDP 定義兩套事件模型:
CommandListener、ItemStateListener,針對 Form/List 等高階組件,語意化命令(確認、返回、選單)Canvas 覆寫保護方法,直接處理鍵盤按鍵碼、觸控座標、重複觸發,適用於遊戲、自繪組件KEY_NUM0 KEY_NUM1 KEY_NUM2 KEY_NUM3 KEY_NUM4
KEY_NUM5 KEY_NUM6 KEY_NUM7 KEY_NUM8 KEY_NUM9
KEY_STAR KEY_POUND // * 鍵與 # 鍵
觸控裝置另行支援指標事件。
| 方法簽名 | 觸發時機 | 典型用途 |
|---|---|---|
keyPressed(int keyCode) | 按鍵按下瞬間 | 遊戲角色移動啟動、選單確認 |
keyReleased(int keyCode) | 按鍵釋放瞬間 | 停止移動、觸發點擊動作 |
keyRepeated(int keyCode) | 長按重複觸發(平台相關) | 持續移動、快速捲動 |
pointerPressed(int x, int y) | 觸控/滑鼠按下 | 點擊偵測、拖曳起點 |
pointerDragged(int x, int y) | 觸控/滑鼠拖曳移動 | 滑動捲軸、繪圖軌跡 |
pointerReleased(int x, int y) | 觸控/滑鼠釋放 | 點擊完成、拖曳結束 |
showNotify() | Canvas 顯示在螢幕上 | 啟動動畫執行緒、恢復音效 |
hideNotify() | Canvas 從螢幕移除 | 暫停動畫、釋放資源、靜音 |
paint(Graphics g) | 系統請求重繪 | 核心渲染邏輯(必須實作) |
paint()public class LowLevelMIDlet extends MIDlet {
protected void startApp() {
Display.getDisplay(this).setCurrent(new KeyCanvas());
}
// pauseApp/destroyApp 省略
}
public class KeyCanvas extends Canvas implements CommandListener {
private String key = "Press any key";
protected void paint(Graphics g) {
g.setColor(0xFFFFFF); g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x000000);
g.drawString(key, getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER);
}
public void keyPressed(int keyCode) {
key = keyCode + " is pressed"; repaint();
}
public void keyReleased(int keyCode) {
key = keyCode + " is released"; repaint();
}
public void commandAction(Command c, Displayable d) { /* 無命令 */ }
}
int action = getGameAction(keyCode);
// 返回:UP, DOWN, LEFT, RIGHT, FIRE, GAME_A...GAME_D
// 抽象平台差異,建議遊戲邏輯使用 game action 而非原始 keyCode
keyPressed/Released 僅更新狀態標記,嚴禁直接繪圖或複雜運算serviceRepaints() 強制立即重繪(雙緩衝模式下)