/head>
ホーム > デベロッパ > J2ME / MIDP プログラミング > 仕様・設計と実装

仕様・設計と実装 (improve の機能仕様と MIDP のつまずきどころ)

001:import javax.microedition.lcdui.*;
002:
003:/**
004: * 確認ダイアログ 1 の画面を提供します。
005: */
006:public class DialogTest1Form extends Form implements CommandListener {
007:
008:    /** 「Yes」と「No」 */
009:    private static final String DIALOG_YES = "Yes";
010:    private static final String DIALOG_NO  = "No";
011:
012:    /** 「結果」のラベルとテキスト */
013:    private StringItem itemResult;
014:
015:    /** 「表示」コマンド */
016:    private Command cmdShow;
017:
018:    /** 
019:     * コンストラクタ。画面の準備をします。
020:     */
021:    public DialogTest1Form() {
022:        super("DialogTest1");
023:
024:        // コマンドの作成とリスナーの登録
025:        cmdShow = new Command("表示", Command.SCREEN, 1);
026:        addCommand(cmdShow);
027:
028:        setCommandListener(this);
029:
030:        // コンポーネントの初期化
031:        itemResult = new StringItem("ダイアログの結果:\n", " ");
032:        append(itemResult);
033:        append("----- [説明] -----\n「表示」で確認ダイアログを表示します。");
034:    }
035:
036:    /**
037:     * コマンドハンドラ。各コマンドが発行された時の処理を行います。
038:     * @param c コマンド
039:     * @param d ディスプレイ
040:     */
041:    public void commandAction(Command c, Displayable d) {
042:        if (c == cmdShow) {
043:            // 「表示」が押された時の処理
044:            // 確認ダイアログを表示
045:            int result = showDialog("確認ダイアログ1", "OK ですか?", d);
046:
047:            // 結果を画面に表示
048:            switch (result) {
049:                case DialogForm.STATUS_LEFT:
050:                    itemResult.setText(DIALOG_YES);
051:                    break;
052:
053:                case DialogForm.STATUS_RIGHT:
054:                    itemResult.setText(DIALOG_NO);
055:                    break;
056:
057:                default:
058:                    itemResult.setText("");
059:                    break;
060:            }
061:        }
062:    }
063:
064:    /**
065:     * 確認ダイアログを表示
066:     * @param title ダイアログのタイトル
067:     * @param message ダイアログのメッセージ
068:     * @param disp 現在の Displayable
069:     */
070:    public int showDialog(String title, String message, Displayable disp) {
071:        // ダイアログを作成、表示
072:        DialogForm dialog = new DialogForm(title, message);
073:        DialogTest1MIDlet.display.setCurrent(dialog);
074:
075:        // ソフトキーが押されるのを待つ
076:        synchronized (dialog) {
077:            try {
078:                dialog.wait();
079:            } catch (InterruptedException e) {
080:                e.printStackTrace();
081:            }
082:        }
083:
084:        // 元の画面に切り替える
085:        DialogTest1MIDlet.display.setCurrent(disp);
086:
087:        return dialog.getCommandStatus();
088:    }
089:
090:    /**
091:     * 確認ダイアログクラス
092:     */
093:    private class DialogForm extends Form implements CommandListener {
094:        /** ステータス定数 */
095:        public static final int STATUS_NONE  = 0;
096:        public static final int STATUS_LEFT  = 1;
097:        public static final int STATUS_RIGHT = 2;
098:
099:        /** ステータス */
100:        private int status;
101:
102:        /**
103:         * コンストラクタ
104:         * @param title ダイアログのタイトル
105:         * @param message ダイアログのメッセージ
106:         */
107:        public DialogForm(String title, String message) {
108:            super(title);
109:
110:            status = STATUS_NONE;
111:
112:            // コマンドの作成とリスナーの登録
113:            addCommand(new Command(DIALOG_YES, Command.BACK, 1));
114:            addCommand(new Command(DIALOG_NO, Command.OK, 1));
115:
116:            setCommandListener(this);
117:
118:            // コンポーネントの初期化
119:            append(message);
120:        }
121:
122:        /**
123:         * コマンドステータス取得
124:         * @return どのキーが押されたかを表わす定数
125:         */
126:        public int getCommandStatus() {
127:            return status;
128:        }
129:
130:        /**
131:         * コマンドハンドラ。各コマンドが発行された時の処理を行います。
132:         * @param c コマンド
133:         * @param d ディスプレイ
134:         */
135:        public synchronized void commandAction(Command c, Displayable d) {
136:            switch (c.getCommandType()) {
137:                case Command.BACK:
138:                    status = STATUS_LEFT;
139:                    notify();
140:                    break;
141:
142:                case Command.OK:
143:                    status = STATUS_RIGHT;
144:                    notify();
145:                    break;
146:
147:                default:
148:                    break;
149:            }
150:        }
151:    }
152:}