ちょっと下準備

絵を貼り付けて、ボタンを押すとパラパラ漫画になるようなのを作りたいです。しかし、未だ様子が良く解らないので、下準備として、まず字を表示させました。MIDletの骨格はHelloMIDlet.javaを用いてます。

このページで作成するのはImageSample01.javaです。このソースを順番に見てきます。

まずはimport文。

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

どうもjavax.microedition.midletがアプレットでいうところのjava.appletに、javax.microedition.lcduijava.awtに対応する感じです。

java.applet.Appletにはpaintメソッドがあって簡単な描画ができますが、javax.microedition.midlet.MIDletにはありません。簡単な描画をする場合でもCanvasなんかを貼り付ける必要があります。

続いてクラス宣言。

public class ImageSample01 extends MIDlet implements CommandListener {

アプレットのクラス宣言に良く似てます。MIDletクラスを継承してます。CommandListenerのところはHelloMIDletのものをそのままパクリました。Commandを処理するために実装してるんでしょう。

続いてインスタンス変数の宣言。

private Command exitCommand; // The exit command
private Display display;     // The display for this MIDlet

これもHelloMIDletをパクッただけ。続いて、

public ImageSample01() {
    display = Display.getDisplay(this);
    exitCommand = new Command("Exit", Command.SCREEN, 2);
}

がきます。MIDletはコンストラクタがいるみたいですね。アプレットのときはinit()でこういった初期化をしてました。コンストラクタの内容は表示させるDisplayを取得して、“Exit”のコマンドを作成してるんでしょう。HelloMIDletのパクリなので詳細は不明です。

public void startApp() {
    ImageCanvas canvas = new ImageCanvas();
    canvas.addCommand(exitCommand);
    canvas.setCommandListener(this);

    display.setCurrent(canvas);
}

これはアプレットのstart()に相当するんでしょう。

してます。

[注意]EA1のときはメソッド名がsetListenerだったのがFCSではsetCommandListenerに変わってます。EA1からのユーザは注意しましょう。

最後にdisplay.setCurrent(canvas)で作成したCanvasを表示させます。

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

ここはHelloMIDletをパクッタだけ。多分、これでいいはず。

public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
        destroyApp(false);
        notifyDestroyed();
    }
}

ここもパクリ。“Exit”が押されたときの処理でしょう。


さて続いて貼り付けるCanvasクラス。サブクラス作らなくても良いと思ってたんですがjavax.microedition.lcdui.Canvasabstractクラスなので必ずサブクラスが必要です。

class ImageCanvas extends Canvas {
    protected void paint(Graphics g) {
        g.drawString("Dancing Radio", 0, 0, Graphics.TOP | Graphics.LEFT);
        System.out.println("Width : " + getWidth());
        System.out.println("Height : " + getHeight());
    }
}

patint()メソッドで字を書かせてるだけです。本質的なのは

g.drawString("Dancing Radio", 0, 0, Graphics.TOP | Graphics.LEFT);

の一行。一番最後の引数Graphics.TOP | Graphics.LEFTは字の左上を指定した座標(ここでは(0, 0))に合わせろという意味です。残る二行

System.out.println("Width : " + getWidth());
System.out.println("Height : " + getHeight());

はどうでも良いです。どれくらいの絵を貼り付けられるか知りたかったので描画可能な幅、高さをコンソールに表示させることにしました。


ではコンパイル・検証・実行してみましょう。コンソールと画面は下のようになります。

D:\midp-fcs\segi>javac -bootclasspath /midp-fcs/classes ImageSample01.java
D:\midp-fcs\segi>preverify -classpath .;/midp-fcs/classes ImageSample01 ImageCanvas
D:\midp-fcs\segi>cd output
D:\midp-fcs\segi\output>midp ImageSample01
Classpath is not set. Defaulting to "."
Width : 96
Height : 100

画面イメージ

描画できるのは96x100の範囲だと解りました。これより小さな画像を準備しましょう。


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

メールアドレス:
最終更新日 : 2000年10月7日(土)
tetsu@segi.org