アニメーション
スレッドを使用する
いよいよアニメーションを作ってみましょう
アニメーションが連続する画面の更新であることは知っていると思います
つまり、一定のタイミングでrepaint()すれば良いのです
この一定のタイミングを作り上げるものこそスレッドです
コンソールJavaでやりましたね
アプレットの場合はThreadを継承できないのでRunnableをインプリメントします
アプレットはスレッドのスケジュール下にあることはいいました
私たちが作るスレッドも、あくまでアプレットのスケジュールに従う必要があります
そのため、Thread()コンストラクタにthisを渡します
あとは、スレッドの実装であるrun()メソッドを定義すれば良いだけですね
repaint()をrun()の内部の無限ループで呼び出せば、値を変化させつづけることができます
その値にしたがって、画面に何かを出力しているのなら、それはアニメーションになります
import java.applet.Applet;
import java.awt.*;
/*<applet code="App14.class" width="400" height="200"></applet>*/
public class App14 extends Applet implements Runnable {
static int Ovalx = 100;
boolean x = true;
public void init() {
setBackground(Color.white);
setForeground(Color.red);
Thread th = new Thread(this);
th.start();
}
public void run() {
try {
while (true) {
repaint();
Thread.sleep(10);
if (x) Ovalx++;
else Ovalx--;
if (Ovalx >= 350) x = false;
if (Ovalx <= 0) x = true;
}
}
catch (Exception err) {
}
}
public void paint(Graphics g) {
g.fillOval(Ovalx , 75 , 50 , 50);
}
}
なんだか、とっても感動的ですね
チカチカするのは、update()メソッドが背景色で塗りつぶしたあとにpaint()を呼び出しているからです
この解決策は後記することにします