Canvas 提供 keyPressed(int keyCode) 回呼處理實體按鍵事件。本文以最小範例示範:建立 MIDlet 啟動自定義 Canvas,按下數字鍵即時顯示鍵名於畫面。
package example.liuy.liuy002;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class liuy002 extends MIDlet {
protected void startApp() throws MIDletStateChangeException {
Display d = Display.getDisplay(this);
d.setCurrent(new keytest());
}
protected void pauseApp() {}
protected void destroyApp(boolean flag) throws MIDletStateChangeException {}
}
package example.liuy.liuy002;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
public class keytest extends Canvas {
private String msg = "[請按鍵]";
protected keytest() { super(); }
protected void paint(Graphics g) {
g.drawString(msg, 10, 10, Graphics.TOP | Graphics.LEFT);
}
protected void keyPressed(int keyCode) {
msg = "數字 " + getKeyName(keyCode) + " 已被按下";
repaint();
}
}
Canvas 繼承自 Displayable,可直接設為當前顯示。getKeyName(int keyCode) 將鍵碼轉為可讀字串 (如 "1", "2", "STAR", "POUND")。repaint() 觸發 paint() 重繪。Canvas.KEY_NUM0 ~ KEY_NUM9,亦可直接用 getKeyName。getKeyStates() 輪詢狀態。keyReleased、keyRepeated 處理長按/釋放邏輯。Graphics 繪製按鍵視覺回饋。GameCanvas (MIDP 2.0) 獲得雙緩衝與按鍵狀態輪詢。