いまの時刻を表示しよう

CountDownアプレットで使う数字の画像をDigit Maniaで選んでたら「これ動かしてみてー」という衝動にかられたので数字が動くアプレット作ることにしました。ありきたりかとは思ったんですがデジタル時計作ります。

まずは現在時刻を表示させて見ましょう。ソースはDigitalClock00.javaになります。
現在の時刻は です。
これでブラウザをひたすら強制リロード(Netscape Navigatorだったらshiftキーを押しながらReloadをクリックする)すると時計みたいに見えます。

ソースコードながめてみましょう。まず最初にimport文を使って使用するクラスを宣言してます。
  import java.applet.Applet;
  import java.awt.*;
  import java.util.Calendar;
ここではjava.appletパッケージにあるAppletクラス、java.awtパッケージにあるクラス、java.utilパッケージにあるCalendarクラスを使うと言ってます。CalendarクラスはJDK1.1から使えるようになったクラスです。

つづいてクラスを定義します。すべてのアプレットはjava.applet.Appletクラスのサブクラスとして定義するお約束なので
    public class DigitalClock00 extends Applet {
としてクラスDigitalClock00をAppletクラスのサブクラスにしてます。またアプレットのクラスはpublicにしとかなくちゃいけません。

次にインスタンス変数の定義です。いくつかのメソッドで使用する変数は必ずインスタンス変数になります。
    private Calendar currentTime;
と時刻を保持する変数を定義しました。currentTimeはCalendar型の変数になります。まあここではインスタンス変数にしとく必要ないんですが後々のことを考えて。
インスタンス変数は相当の理由がない限りはprivateにしといた方が良いです。「何で?」という質問はキチンと答えられないので却下します。“情報隠蔽”とか“カプセル化”というキーワードと関連あるみたい。

次にinitメソッドを定義します。
    public void init() {
        currentTime = Calendar.getInstance();
    }
initメソッドはブラウザがアプレットを読み込んだときに呼ばれます。
ここで変数currentTimeを初期化してます。クラスの型を持つ変数を初期化するときには
    Foo afoo = new Foo();
のようにnewを用いてコンストラクタ呼び出すことが多いんですが、Calendarはちょっと違います。JDK1.1からこんなクラス結構増えました。
CalendarクラスのクラスメソッドgetInstanceは引数に何も指定しないと現在時刻を保持するインスタンスを返します。だからこれでcurrentTimeに現在時刻が設定されたことになります。

さて最後にpaintメソッドです。このメソッドは色んなときに呼び出されます。ここに描画の命令を書いとくとアプレットに色んなものが書けると考えとけば良いです。
    public void paint(Graphics g) {
        String timeString = currentTime.get(Calendar.HOUR) + " : " +
                            currentTime.get(Calendar.MINUTE) + " : " +
                            currentTime.get(Calendar.SECOND);
        g.drawString(timeString, 0, 15);
    }
これで現在時刻がアプレット上に描かれます。
currentTime.get(Calendar.HOUR)でcurrentTimeが保持する時分秒のうち時が取り出せます。同様にcurrentTime.get(Calendar.MINUTE)、currentTime(Calendar.SECOND)で分、秒です。これらを連結して一つの文字列にし、まず変数timeStringに格納します。で、
    g.drawString(timeString, 0, 15);
としてtimeStringの内容をアプレット上に描かせてます。

次の項目へ
「メイキング・オブ・DigitalClock」へ

最終更新日 : 1999年3月12日(金)

カメ飼ってます Valid HTML 4.0! Made with CSS midosabu@postpet.so-net.ne.jp