程式架構
Canvas3let:主 MIDlet,管理 TextBox(輸入畫面)與 MyCanvas(繪圖畫面)切換
MyCanvas:繼承 Canvas,處理按鍵事件與重繪
關鍵程式碼片段
// 主 MIDlet 初始化
public Canvas3let() {
exitCommand = new Command("退出", Command.EXIT, 1);
okCommand = new Command("進入", Command.OK, 1);
showImage = Image.createImage("/sohu.png");
showAlert = new Alert("Loading...", "載入中……", showImage, AlertType.INFO);
aTextBox = new TextBox("KeyPress Test", "按下進入鍵...", 25, TextField.ANY);
aTextBox.addCommand(exitCommand);
aTextBox.addCommand(okCommand);
aTextBox.setCommandListener(this);
}
// 按鍵處理
public void keyPressed(int keyCode) {
keyName = getKeyName(keyCode); // 取得按鍵名稱
repaint(); // 觸發重繪
}
// 畫面繪製
public void paint(Graphics g) {
g.setColor(0xFFFFFF); g.fillRect(0, 0, getWidth(), getHeight()); // 清背景
g.setColor(0); g.drawString(keyName, 100, 100, Graphics.LEFT | Graphics.BOTTOM);
}
// hideNotify:畫面移除時自動呼叫
protected void hideNotify() {
aDisplay.setCurrent(showAlert, aTextBox); // 顯示 Alert 後回文字輸入框
}
生命週期方法對照
| 方法 | 觸發時機 |
| showNotify() | Canvas 顯示在螢幕之前 |
| hideNotify() | Canvas 從螢幕移除後立即呼叫 |
| paint() | 需要重繪時(含 repaint() 觸發) |
重點總結
keyPressed(int keyCode) 捕捉實體按鍵,配合 getKeyName() 取得可讀名稱
repaint() 排程重繪,實際繪製在 paint(Graphics) 中
- 命令監聽器
CommandListener 處理軟鍵選單事件
hideNotify() 適合釋放資源或切換顯示畫面