消さずに更新


update()のオーバーライド

アニメーションの基本的な仕組みもわかりました
これで、かなり高度なアプレットが作れるようになってきましたね

今までrepaint()メソッドでupdate()を呼び出すと、コンポーネントが全て背景色で消されてしまいました
もちろん、コンポーネントの全体的な更新が目的ならそれでもかまいません

しかし、コンポーネントに対してpaint()メソッドを呼び出して内容を追加したい場合はこれじゃ困ります
今回は、コンポーネントを塗りつぶすことなくpaint()メソッドを呼び出して上書きする方法を覚えましょう

コンポーネントの内容を背景色でクリアしているのは、update()メソッドの仕様です
ということは、このupdate()メソッドをオーバーライドして
コンポーネントを背景色で塗りつぶさないようにすれば良いのです

public void update( Graphics g )

gはGraphicsオブジェクトを受け取ります
オーバーライドしたupdate()メソッドで、paint()メソッドを呼び出せば良いですね
当然、背景色で塗りつぶすようなことはしません。ただ純粋にpaint()を呼び出します
paint()メソッドにはGrahicsオブジェクトを渡します
import java.applet.Applet;
import java.awt.*;

/*<applet code="App15.class" width="400" height="200"></applet>*/

public class App15 extends Applet implements Runnable {
	public void init() {
		setBackground(Color.white);
		setForeground(Color.blue);

		Thread th = new Thread(this);
		th.start();
	}

	public void run() {
		try {
			while (true) {
				repaint();
				Thread.sleep(1000);
			}
		}
		catch (Exception err) {
		}
	}

	public void update(Graphics g) {
		paint(g);
	}

	public void paint(Graphics g) {
		int x = (int)(Math.random() * 400) , y = (int)(Math.random() * 200);
		g.drawLine(x , y , (int)(Math.random() * (400 - x)) , (int)(Math.random() * (200 - y)));
	}
}
アプレット

乱数の値で線を引きつづけます
新しい線をコンポーネントに描画するのに、以前の線を残したまま再描画します
ただし、別ウィンドウでコンポーネントを隠したりすると消えてしまいます
アプレットは一度隠されると、再び表示される時に再描画する仕様になっているからです



前のページへ戻る次のページへ