■ストップウォッチ(サンプル)

 iアプリ開発のお勉強をしてみようと言うことで、 とりあえずの題材として、簡易なストップウォッチを作成してみました。 エミュレータ上では、一通り動いたので、忘れないうちにソフトウェアの構成について 簡単にメモしておこうと思います。

開発環境

 開発は、Eclipse 2.1.3 / Doja 3.5 / Java 1.4.2 と言う環境で行いました。 開発環境のインストールについては、参考文献に記載している 「Doja-3.5 API iαppli Development Kit ユーザーズガイド」や、 他のネット上のサイトを参照してください。

ソフトウェアの構成

 今回作成したiアプリのソフトウェア構成についてメモしときます。 今回はストップウォッチを作成しましたので、 必要なソフトウェアの要素としては大まかに「タイマ制御」「キー制御」「画面制御」、 そして大元の「アプリケーション制御」が必要でした。簡単に表にしてみます。

アプリケーション制御 iアプリではメインのクラスとして、IApplicationクラスを継承したクラス (便宜上「メインクラス」と言っときます)を作成する必要があります。 iアプリの起動後は、メインクラス内のIApplication.start()メソッドを オーバーライドしたメソッドから処理が開始されます。 メインクラスで、複数の画面制御のクラスを持っておき、 それらをDisplay.setCurrent()メソッドで切り替えることにより、 アプリケーションを制御するのだと想像しています。 今回は、画面が一個だったので、start()メソッド内では その画面をセットしただけで、他には特になんもしていません。
画面制御 画面を描画するためには、Panelクラスもしくは、 Canvasクラスを継承したクラスを用意する必要があります。 今回は、Canvasクラスを継承したクラスを作成しています。 画面への描画は、Canvas.getGraphics()メソッドで取得する Graphicsクラスのインスタンスに対して行います。 普通にGraphicsクラスのインスタンスへ操作を行うと、 そのまま画面へ表示されます。 (メインクラスで、Display.setCurrent()メソッドにて、 画面表示の指定をしとく必要はあります)
キー制御 Canvasクラスを画面の表示に使っている場合、 キーが押下された際のイベント通知には、 Canvas.processEvent()メソッドが利用されます。 イベントが発生したときにこのメソッドが呼ばれるため、 画面制御のクラスでこのメソッドをオーバーライドする必要があります。 なお、このメソッドはキーイベントだけではなく、 各種のイベントが発生したときに呼び出されます。 通知されるイベントの種類はDisplayクラスに定義されています。 イベントタイプがDisplay.KEY_PRESSED_EVENTを示している時が キー押下のイベントの発生を示しています。
タイマ制御 Canvasを用いる場合、タイマはShortTimerクラスを用いる方法と Timerクラスを用いる方法の二つがあります。今回はTimerクラスを利用しました。 Timerクラスを利用するクラスは、TimerListnerインタフェースを実装し、 Timerクラスのインスタンスを持つ必要があります。 Timerクラスのインスタンスに対し、タイマの開始・停止を指示するのですが、 開始を指示したタイマがタイムアウトした時には TimerListner.timerExpired()メソッドをオーバーライドしたメソッドが 呼び出され、これによりタイマの処理を実現しています。


サンプル

 練習用の題材のため、ストップウォッチの仕様はFキーの押下毎に 「スタート」→「ストップ」→「リセット」と言う単純なものにしました。 この仕様で、前記のソフトウェア構成を元に作成したもののクラス図を 下記に示します。 また、プロジェクト一式も置いておきます。何かの参考になれば幸いです。

ちなみに、計測時間は時間が経つにつれて遅れが出ています。 1/100毎に時間の描画をしているため、処理が追いついていないせいかも知れませんが、 サンプルと言うことでご了承ください。 ちなみに原因等は全然調べていません。

 プロジェクト一式:stopwatch.lzh



参考文献

 開発にあたり、下記の資料及び、Web上の連載記事等を参考にしました。

1 iアプリコンテンツ開発ガイド for DoJa-3.0 詳細編
2 iアプリコンテンツ開発ガイド for DoJa-3.5 APIリファレンス編
3 Doja-3.5 API iαppli Development Kit ユーザーズガイド
4 CLDC API Documentation, V1.1(英語)
5 ITmedia Enterprise - Eclipseで始めるiアプリ


(2005/03/05)

ぐうたラボ...