Canvas + Graphics,完全控制像素與事件,適合遊戲,需自繪所有內容。public class MyCanvas extends Canvas {
private MIDlet midlet;
public MyCanvas(MIDlet m) { this.midlet = m; }
protected void paint(Graphics g) {
g.setColor(0xFFFFFF); g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(0x000000); g.drawString("Hello", getWidth()/2, 0, Graphics.TOP | Graphics.HCENTER);
}
protected void keyPressed(int keyCode) {
((MyMIDlet)midlet).exit(); // 示例:任意鍵退出
}
}
public class MyMIDlet extends MIDlet {
private Display display; private MyCanvas canvas;
public MyMIDlet() {
display = Display.getDisplay(this);
canvas = new MyCanvas(this);
}
protected void startApp() { display.setCurrent(canvas); }
public void exit() { destroyApp(true); notifyDestroyed(); }
}
使用 getGameAction(keyCode) 將設備鍵碼映射為標準方向鍵(UP/DOWN/LEFT/RIGHT/FIRE/GAME_A~D)。建議在基類中緩存鍵碼:
public abstract class GameCanvas extends Canvas {
protected int upKey, downKey, leftKey, rightKey, fireKey;
public GameCanvas(MIDlet m) {
upKey = getKeyCode(UP); downKey = getKeyCode(DOWN);
leftKey = getKeyCode(LEFT); rightKey = getKeyCode(RIGHT);
fireKey = getKeyCode(FIRE);
}
}
並非所有設備支持。先調用 hasPointerEvents() 檢測,再覆寫 pointerPressed(x,y) 等方法。
為 Canvas 添加 Command,實現 CommandListener 處理軟鍵菜單。
Command exitCmd = new Command("Exit", Command.EXIT, 1);
canvas.addCommand(exitCmd);
canvas.setCommandListener(this); // MIDlet 實現 CommandListener
public void commandAction(Command c, Displayable d) {
if (c == exitCmd) exit();
}
命令類型:BACK, CANCEL, EXIT, HELP, ITEM, OK, SCREEN, STOP。優先級數字越小越高。