低レベルイベント処理

画像の貼り付けに成功したので、ボタンを押すと複数の画像が切り替わるようにします。このページではImageSample03.javaを作ります。

複数の画像をimage[]に持たせて、変数countの値に応じてimage[count]を表示させるようにしときます。それでボタンが押されたらcountを変化させるだけです。

まず複数の画像を持たせる部分は

for (int i = 0; i < N_IMAGES; i++) {
    String fname;
    if (i < 9) {
        fname = "0" + (i+1);
    } else {
        fname = "" + (i+1);
    }

    MediaImage mi = MediaManager.getImage("resource:///images/" + fname + ".gif");

    image[i] = mi.getImage();
}

のようにforループで処理してます。コードを追いかければ解りますが01.gif02.gifが順番に読みこまれます。

ここでN_IMAGESと定数を用いてるのは気分の問題。これは

private static final int N_IMAGES = 2;

とイメージの数を指定してます。増やす場合はここだけを変えてリコンパイルすると良いようにしてます。

drawImage()の部分は

g.drawImage(image[count], 0, 20);

image[count]を表示させるようにしてます。

さて、いよいよ本題のイベント処理。Canvasでは、あらゆるイベント処理をprocessEventでまとめて行ないます。見ていきます。

public void processEvent(int type, int param) {
    if (type == Display.KEY_PRESSED_EVENT) {
        switch (param) {
        case Display.KEY_DOWN :
        case Display.KEY_UP :
            count++;
            if (count >= N_IMAGES) {
                count = 0;
            }
            repaint();
            break;
        default :
            break;
        }
    }
}

何かイベントが起きるとprocessEventが呼ばれ、引数typeにイベントタイプが渡されます。イベントタイプによってはparamに値が入ります。

どんなイベントタイプがあって、どんな値が渡されるかは「iモード対応Javaコンテンツ開発ガイド 〜詳細編〜」に記述があるので、参照下さい。

キーが押されたときにはtypeDisplay.KEY_PRESSED_EVENTが渡され、paramには押されたキーの値が入ります。

まず最初の

if (type == Display.KEY_PRESSED_EVENT) {

でキーが押されたイベントを捕まえます。続いての

switch (param) {

で、押されたキーにしたがって処理を行ないます。ここではDOWNキーとUPキーが押されたときだけ画像を変化させることにしたので

case Display.KEY_DOWN :
case Display.KEY_UP :
    count++;
    if (count >= N_IMAGES) {
        count = 0;
    }
    repaint();
    break;

paramの値がKEY_DOWNKEY_UPのときだけcountの値を変化させrepaint()で再描画をさせてます。

ImageSample02との違いは以上です。コンパイル、事前検証、パッケージ化しましょう。

D:\iAppli>ijavac ImageSample03.java
D:\iAppli>iprev ImageSample03 ImageCanvas
D:\iAppli>cd output
D:\iAppli\output>jar cvMf image03.jar ImageSample03.class ImageCanvas.class images

ImageSample03.class を追加中です。(入 = 342) (出 = 251)(26% 収縮されました)
ImageCanvas.class を追加中です。(入 = 1600) (出 = 876)(45% 収縮されました)
images/ を追加中です。(入 = 0) (出 = 0)(0% 格納されました)
images/01.gif を追加中です。(入 = 776) (出 = 671)(13% 収縮されました)
images/02.gif を追加中です。(入 = 785) (出 = 681)(13% 収縮されました)

ADFはimage03.jamで、表示する画像は01.gif02.gifです。

ダウンロード用HTMLはhttp://www.segi.org/i/j/t/にあるので、iαppl対応携帯をお持ちの方はお試し下さい。

どうでしょう。ちょっと予想外の動作ですね。前の画像の残像が残ってしまいます。これは次のページで解決します。


前の項目へ次の項目へ
「iαppliであそぼう!」のページへ
せぎてつ伝言板
このページの感想をどうぞ!
お名前(匿名OK):

メールアドレス:
Valid CSS! 最終更新日 : 2000年2月12日(月)
tetsu@segi.org