Appletの描画処理
アプレットに絵を描くための関数も名前が予約されていて、
それぞれ特別な働きがあります。
(ここで説明するのは Graphicsクラスに付属する個々の関数ではありません。
それらをまとめておくための関数です。)
repaint() は、
皆さんのプログラムの側でいつ呼び出すかを決めなくてはいけません。
通常はマウスのボタンが押されるなどイベントが発生した時ですが、
それ以外の処理でも呼ばれる可能性はあります。repaint()によって間接的に呼び出されます。paint()は、
アプレットが最初に画面に現れた時にも自動的に呼び出されます。
Appletクラスの設定では、repaint()
はupdate()を呼び出し、
update()は以下に示すように画面をクリアした後、
paint()を呼び出す仕組みになっています。
public void update(Graphics g) {
g.clearRect(0, 0, width, height);
paint(g);
}
updata()を特別に書き換えない場合は、
新しいアプレットはこの機能をそのまま Appletクラスから受け継ぐことになります。
たとえば、アプレットに描かれる図形が全く変化しないか、
あるいは決まった数通りのパターンしかないような場合なら、
このままで問題はありません。
paint()の内部の処理を適当に書いておけば十分対応できます。update()を目的に応じて
書き変えてください。
(その場合には、paint()はもはやrepaint()から
は呼び出されず、最初に画面に現れる時に自動的に呼び出されるだけに
なります。)
update()を書き変えて、ペイント・ツールの
機能を実現した例を見てみましょう。
public void paint( Graphics g ) {
g.setForeground( Color.white );
g.paint3DRect( 0, 0, 600, 400, true, true );
}
public void update( Graphics g ) {
g.drawLine( x1, y1, x2, y2 ); // 線を描く
x1 = x2;
y1 = y2;
}
public void mouseDrag( int x, int y ) {
x2 = x;
y2 = y;
repaint(); // update() を呼び出す
}