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

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

001:import java.util.*;
002:import javax.microedition.lcdui.*;
003:
004:/**
005: * TimerTest プログラムの画面を提供します。
006: */
007:public class TimerTestForm extends Form implements CommandListener {
008:
009:    /** タイマ */
010:    private Timer timer;
011:
012:    /** タスク 1 */
013:    private TimerTask task1 = new TimerTask() {
014:            public void run() {
015:                itemState1.setText("  タイマ発生!");
016:            }
017:        };
018:
019:    /** タスク 2 */
020:    private TimerTask task2 = new TimerTask() {
021:            public void run() {
022:                itemState2.setText("  タイマ発生!");
023:            }
024:        };
025:
026:    /** 「タスク 1 の状態」のラベルとテキスト */
027:    private StringItem itemState1;
028:
029:    /** 「タスク 2 の状態」のラベルとテキスト */
030:    private StringItem itemState2;
031:
032:    /** 「登録」コマンド */
033:    private Command cmdSchedule;
034:
035:    /** 「キャンセル」コマンド */
036:    private Command cmdCancel;
037:
038:    /** 
039:     * コンストラクタ。画面の準備をします。
040:     */
041:    public TimerTestForm() {
042:        super("TimerTest");
043:
044:        // コマンドの作成とリスナーの登録
045:        cmdSchedule = new Command("登録", Command.SCREEN, 1);
046:        cmdCancel = new Command("キャンセル", Command.SCREEN, 1);
047:
048:        addCommand(cmdSchedule);
049:        addCommand(cmdCancel);
050:
051:        setCommandListener(this);
052:
053:        // コンポーネントの初期化
054:        itemState1 = new StringItem("タスク 1 の状態:\n", " ");
055:        itemState2 = new StringItem("タスク 2 の状態:\n", " ");
056:        
057:        append(itemState1);
058:        append(itemState2);
059:
060:        append("------ [説明] ------");
061:        append("  [登録]を押すとタスク1, 2をワンショットで3秒後と5秒後に登録します。"
062:            + "[キャンセル]を押すとキャンセルします。");
063:
064:        // タイマの作成
065:        timer = new Timer();
066:    }
067:
068:    /**
069:     * コマンドハンドラ。各コマンドが発行された時の処理を行います。
070:     * @param c コマンド
071:     * @param d ディスプレイ
072:     */
073:    public void commandAction(Command c, Displayable d) {
074:        if (c == cmdSchedule) {
075:            // 「登録」が押された時の処理
076:            timer.schedule(task1, 3000);
077:            timer.schedule(task2, 5000);
078:            itemState1.setText("  登録しました");
079:            itemState2.setText("  登録しました");
080:        } else if (c == cmdCancel) {
081:            // 「キャンセル」が押された時の処理
082:            task1.cancel();
083:            task2.cancel();
084:            itemState1.setText("  キャンセルしました");
085:            itemState2.setText("  キャンセルしました");
086:        }
087:    }
088:}