首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

MIDP 底層 UI API 詳解:Canvas、Graphics、事件與命令

     編輯:Java 相關知識

高層 vs 底層 API

  • 高層 API:面向業務抽象(List、Form),可移植,適合商務應用。
  • 底層 API:Canvas + Graphics,完全控制像素與事件,適合遊戲,需自繪所有內容。

Canvas 基礎用法

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(); // 示例:任意鍵退出
    }
}

啟動 Canvas

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。優先級數字越小越高。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved