仕様・設計と実装 (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:}