選択画面を分ける

選択と同時にpizzaの出来上がりが見えるのがミソなんですが、今のままだとスクロールさせないと画像が見辛いです。そこで画面を分割しました。ソースはOrderPizza05.javaで、画面は左です。

画面間を行き来するためにCommandを用います。インスタンス変数として

private Command decideCommand = new Command("Decide", Command.SCREEN, 1);
private Command exitCommand = new Command("Exit", Command.SCREEN, 99);
private Command backCommand = new Command("Back", Command.SCREEN, 2);

のように作成して各Formに貼り付けます。Commandが選択されたときはCommandListenercommandAction()が呼び出されます。そのメソッドから見てきましょう。

public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
        destroyApp(false);
        notifyDestroyed();
    } else if (c == backCommand) {
        display.setCurrent(sizeForm);
    } else if (c == decideCommand) {
        if (s == sizeForm) {
            selectedSize = size.getSelectedIndex();
            display.setCurrent(toppingForm);
            displayImage();
        }
    }
}

選択されたコマンドがexitCommandだった場合はMIDletの終了処理をします。

backCommandが選択されるのはトッピング選択の画面なので、これが選択された場合はサイズの選択画面を表示させます。

decedeCommandはサイズ選択画面、トッピング選択画面のどちらにも貼り付けるので、まずどちらの画面で選択されたかを調べます。

サイズ選択画面からきたコマンドの場合は、選択されたサイズをselectedSizeに保存し、トッピング選択画面に切り替え、適切な画像を表示させます。

これでコマンド処理部分は終わりです。

画面を分けるために二つのFormを作成してるので次にそれを見ましょう。サイズ選択画面は

sizeForm = new Form("Select Size");
sizeForm.append(size);
sizeForm.addCommand(decideCommand);
sizeForm.addCommand(exitCommand);
sizeForm.setItemStateListener(this);
sizeForm.setCommandListener(this);

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

と作成します。ChoiciGroupの処理に加えてCommandの処理のための3行

sizeForm.addCommand(decideCommand);
sizeForm.addCommand(exitCommand);
sizeForm.setCommandListener(this);

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

が加わってます。トッピング選択画面も同様に

toppingForm = new Form("Select Topping");
toppingForm.append(topping);
imageIndex = toppingForm.append(pizza);
toppingForm.addCommand(decideCommand);
toppingForm.addCommand(exitCommand);
toppingForm.addCommand(backCommand);
toppingForm.setItemStateListener(this);
toppingForm.setCommandListener(this);

[注意]EA1のときはメソッド名がappendItemだったのがFCSではappendに変わってます。同様にappendImageappendに、setListenersetCommandListenerに変わってます。EA1からのユーザは注意しましょう。

と作成してます。

本質的な変更は大体これくらいでしょうか。

さて実行して見ましょう。

D:\midp-fcs\segi\pizza>javac -bootclasspath /midp-fcs/classes OrderPizza05.java
D:\midp-fcs\segi\pizza>preverify -classpath .;/midp-fcs/classes OrderPizza05
D:\midp-fcs\segi\pizza>cd output
D:\midp-fcs\segi\pizza\output>set SCREEN_DEPTH=8
D:\midp-fcs\segi\pizza\output>midp OrderPizza05

何となくインタラクティブという感じがして良くありませんか?

トッピング選択画面でDecideを押しても何も起こりません。そりゃそうですね、何も処理してないんだから。ちゃんとここも考えてるので続きを乞御期待。


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

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