アニメのような動きのある画面の作り方を見ていきます。 それには、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);