アニメのような動きのある画面の作り方を見ていきます。 それには、Timerクラスを使います。
Timerクラスの使い方です。 1秒間隔で描画するプログラムを作ってみます。
線が伸びていきます。
import java.awt.Graphics2D;
import java.util.Timer;
import java.util.TimerTask;
import Tpl01;
public class TestJavaApplet21 extends Tpl01 {
int i;
public void init() {
i = 0;
Timer t = new Timer();
t.scheduleAtFixedRate(new MyTimerTask(), 0, 1000);
}
public void draw(Graphics2D g2) {
g2.drawLine(0, 0, i, i);
i += 10;
if (i > getWidth()) {
i = 0;
}
}
class MyTimerTask extends TimerTask {
public void run() {
repaint();
}
}
}
絵が動いているように見せる原理はパラパラ漫画です。 描画する。 画面をクリアする。 これを繰り返します。 結局動いているように見えるわけです。 これは、Timer クラスを使えば可能です。
Timerクラスは、一定時間ごとに TimerTaskクラスを呼びます。 ですから、まず 、TimerTask クラスを継承したクラスを作ります。 この例では、MyTimerTask にしました。 その中で、画面を再描画するメソッド repaint を書きます。
class MyTimerTask extends TimerTask {
public void run() {
repaint();
}
}
Timerクラスの変数を生成します。
Timer t = new Timer();
次は、すぐに(0秒後に)1秒おきに MyTimerTaskを呼ぶためのプログラムです。 scheduleAtFixedRateメソッドを使い、次のように書きます。 時間の単位はミリ秒です。 1秒は1000ミリ秒です。 ですから、この例では1秒おきに MyTimerTask を呼びます。
t.scheduleAtFixedRate(new MyTimerTask(), 0, 1000);
実際の描画は、draw メソッドに書きます。 線を描画していますが、少しずつ長くしています。
g2.drawLine(0, 0, i, i);