libro
www.tuyano.com
iアプリ・プログラミング入門

イメージの利用とイベント処理 (3/6)

作成:2009-12-30 09:57
更新:2009-12-30 09:57

■Canvasのイベント処理

次に、Canvasのイベント処理について考えてみましょう。Panelでは、各種のイベントリスナーが用意されており、これを使ってイベント処理を実装しましたが、Canvasではこうしたイベントリスナーはありません。ではどうするのか?というと、Canvasに用意されているイベント処理用のメソッドをオーバーライドして処理をします。これは以下のような形をしています。

※Canvasのイベント処理用メソッド
public void processEvent(int type, int param) {
    ……イベント処理を用意……
}

引数にはイベントの種類を示す値と必要ならばパラメータの値が渡されます。実をいえば、Canvasに用意されているイベント処理機能は、実にこのメソッド1個だけです。何があっても、すべてこのメソッドでまとめて処理されます。

ですから、この中でどういうイベントが発生し、どういうパラメータが送られたかに応じてすべての処理を用意する必要があります。では、実際にサンプルを作成してイベント処理を行ってみましょう。

ここでは、5×5の盤面を用意し、そこにイメージを表示するようにしました。現在、選択されているマス目には、赤い枠が表示されます。上下左右キーで選択するマス目を移動することができます。そして選択キーを押すと、そのマス目のイメージの表示をON/OFFすることができます。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※MainCanvasの修正
class MainCanvas extends Canvas {
    private Image image;
    private static final int MAX_X = 5,MAX_Y = 5;
    private static final int IMG_W = 32,IMG_H = 32;
    private int x, y;
    private boolean[][] flg;

    MainCanvas() {
        this.setSoftLabel(Frame.SOFT_KEY_2, "EXIT");
        flg = new boolean[MAX_X][MAX_Y];
        try {
            MediaImage mi = MediaManager.getImage("resource:///image.gif");
            mi.use();
            image = mi.getImage();
        } catch (ConnectionException e) {
        }
    }

    public void paint(Graphics g) {
        g.lock();
        g.clearRect(0, 0, this.getWidth(), this.getHeight());
        for (int i = 0; i < MAX_X; i++) {
            for (int j = 0; j < MAX_Y; j++) {
                if (flg[i][j]) {
                    g.drawImage(image, i * IMG_W, j * IMG_H);
                }
            }
        }
        g.setColor(Graphics.getColorOfName(Graphics.RED));
        g.drawRect(IMG_W * x, IMG_H * y, IMG_W, IMG_H);
        g.unlock(true);
    }

    public void processEvent(int type, int param) {
        super.processEvent(type, param);
        switch (type) {
        case Display.KEY_PRESSED_EVENT:
            switch (param) {
            case Display.KEY_UP:
                y -= y == 0 ? 0 : 1;
                break;
            case Display.KEY_DOWN:
                y += y == MAX_Y - 1 ? 0 : 1;
                break;
            case Display.KEY_LEFT:
                x -= x == 0 ? 0 : 1;
                break;
            case Display.KEY_RIGHT:
                x += x == MAX_X - 1 ? 0 : 1;
                break;
            case Display.KEY_SELECT:
                flg[x][y] = !flg[x][y];
                break;
            case Display.KEY_SOFT2:
                IApplication.getCurrentApp().terminate();
                break;
            }
            repaint();
        }
    }
}

※関連コンテンツ

「iアプリ・プログラミング入門」に戻る