時計を動かしますか

「強制リロードし続ければ時計に見える」というんじゃあんまりですから動かしましょう。こうなります。
現在の時刻は です。
ソースはDigitalClock01.javaです。

前のコードにちょっと手を加えて時刻がアニメーションのように書き換わるようにすれば良いです。
どうやるとアニメーションができるかというのを真面目に話すとうざったい。いくつかお約束があって、とりあえずそれに従っとくと簡単なアニメーションはできます。
まず最初のお約束としてアニメーションのアプレットはRunnableインタフェースを実装してないとダメ。そこで
    public class DigitalClock01 extends Applet implements Runnable{
とクラス宣言でRunnableの実装を宣言します。

次のお約束としてThreadクラスのインスタンス変数を定義します。
    private Thread thread;
で、この変数の初期化と無効化をstartメソッド、stopメソッドで行います。
    public void start() {
        if (thread == null) {
            thread = new Thread(this);
            thread.start();
        }
    }

    public void stop() {
        if (thread != null) {
            thread = null;
        }
    }
startメソッドはアプレットがあるページを表示しようとするときに呼ばれるメソッドです。stopメソッドは反対にアプレットのあるページから他のページに移動したりしてアプレットの表示を終了するときに呼ばれます。

さて最後のお約束。アニメーションやるときのメインの処理はrunメソッドに書かれます。
    public void run() {
        while (true) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                break;
            }

            currentTime = Calendar.getInstance();

            repaint();
        }
    }
まず最初の
    while (true) {
でこのループを無限ループにしてます。つぎの
    try {
        Thread.sleep(500);
    } catch (InterruptedException e) {
        break;
    }
では500ミリ秒動作を待たせてます。このへんもお約束の記述です。
続いての処理がアプレット毎に異なるところです。このアプレットでは簡単に
    currentTime = Calendar.getInstance();
と変数currentTimeの値を現在時刻に設定し直しています。
こうして必要な処理が終わったところで
    repaint();
とrepaintメソッドを呼び出します。repaintメソッドはpaintメソッドを呼び出すのでアプレットが再描画されることになります。

runメソッドで行われる処理をまとめると
となります。paintメソッドではcurrentTimeの値を描画するようになってるので、結局500ミリ秒毎に現在時刻を表示することになります。

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

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

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