[アナログ時計]
アナログ時計に世界時計の機能をつけてみた。
チョイスからタイムゾーンを選ぶことで、その地域の現在の時間を表示することができる。



ソース

JDK1.2ではDateクラスの機能のほとんどが推奨されいていないため、
Calendarクラスを使い現在の時間を取得している。
時計の針の座標は三角関数を使い、計算をした。
また実際の時計を見て短針は長針に、長針は秒針に影響されて変化していることが
わかった。そのため針の座標の計算もそのように修正してみたところ
実際のものに近い動きを再現することができたと思う。

時計の描画は最初、ちらつきが激しく見づらかったので
参考書に載っていたダブルバッファリングという手法を使わせてもらった。
よくわからないが、これはあらかじめイメージを別に用意しておき
それに対し描画を行い、そのイメージをアプレットに貼り付けるもので
このおかげで、ちらつきが全く気にならなくなり時計が見やすくなった。

今回のプログラムで一番時間を費やしたのは、世界時計の部分だった。
TimeZoneクラスのgetAvailableIDs()メソッドで利用できる
全てのタイムゾーンを取得し、チョイスの項目に追加する。
タイムゾーンが選ばれると、そのタイムゾーンのIDでCalendarオブジェクトを
インスタンス化するようにしたが、今まで動いていたはずのアナログ時計が
突然表示さえされなくなったり例外が発生したりして
プログラムを修正するのに非常に苦労した。

[改善すべき点]
・文字盤の数字の大きさを考慮していないため、時計の針の位置と
 数字の位置がずれる。

・タイムゾーンの選択が可能だが、タイムゾーンがどの地域のものなのか
 よくわからない。
 せめてタイムゾーンの名前を日本語で選べればよかったが、
 タイムゾーンの名前を日本語表示に直すようなメソッドは見当たらないし、
 自力で全てのタイムゾーンの日本語名を用意しておくわけにもいかず
 結局、良い方法が見つからなかった。

・アメリカなどの一部の国では、サマータイム(DST)という制度があり
 1年間で定められた期間中は時計を1時間進めるらしいのだが、
 それに対応していない。

以上の点はまだ不十分なので今後、改善していきたいと思う。

戻る