MIDP (Mobile Information Device Profile) 定義了運行在手機、呼機等小型設備上的 Java 應用接口。不同於桌面端的 AWT/Swing,MIDP UI 專為小屏幕、鍵盤操作、有限內存設計,採用基於屏幕的導航模型。
Display.getDisplay(midlet) 獲取實例display.setCurrent(screen),支持回調模式實現流程控制| 類別 | 高級 API (High-Level) | 低級 API (Low-Level) |
|---|---|---|
| 核心類 | Form, List, TextBox, Alert, TextField, Ticker | Canvas, Graphics, Image |
| 特點 | 設備自適應、可移植性強、外觀由實現設備決定 | 像素級控制、繪製任意圖形、需自行處理移植適配 |
| 適用場景 | 表單、選單、文本輸入、提示框等標準業務界面 | 遊戲主界面、自定義圖表、動畫、特殊交互 |
| 事件處理 | CommandListener (高級命令) | 鍵盤事件、指針事件、繪製回調 |
public class MyCanvas extends Canvas {
protected void paint(Graphics g) {
// 繪製邏輯:g.drawLine, fillRect, drawString, drawImage...
}
protected void keyPressed(int keyCode) {
int action = getGameAction(keyCode); // 映射為 UP/DOWN/LEFT/RIGHT/FIRE
// 處理遊戲邏輯
}
}
關鍵點:
paint() 由系統回調,不可直接調用,需 repaint() 請求重繪getWidth()/getHeight() 獲取畫布實際尺寸,實現自適應佈局getGameAction() 將設備具體鍵碼映射為標準遊戲動作,解決鍵盤差異public class GameMIDlet extends MIDlet {
private SplashScreen splash;
private MainMenuScreen menu;
public void startApp() {
if (Display.getDisplay(this).getCurrent() == null) {
splash = new SplashScreen(this);
Display.getDisplay(this).setCurrent(splash);
}
}
// 回調方法
public void splashDone() {
menu = new MainMenuScreen(this);
Display.getDisplay(this).setCurrent(menu);
}
}
每個 Screen 持有 MIDlet 引用,完成任務時調用 MIDlet 回調方法切換下一屏,實現鬆耦合流程控制。
Font.getHeight() 計算文本尺寸MIDP UI 設計哲學是「屏幕為中心,適配為優先」。高級 API 換取可移植性,低級 API 換取繪製自由度。遊戲開發通常採用混合模式:菜單、設置用高級 API;遊戲主場景用 Canvas 低級繪圖。下一篇將通過「九宮格」完整案例演示混合開發實戰。