質問: ### 質問したいこと appletviewerで表示しているプログラムについて、 ウィンドウの大きさを変更したときによばれる再描画メソッドは何か教えてください。 ### 試したこと 通常、再描画させたいときにはrepaint()を呼び出し、 repaint()は、update()を経て、paint()メソッドを呼び出しますが appletviewerにて表示されているウィンドウのサイズを変更したときには どうやらupdate()メソッドが呼ばれていないようなのです。 update()メソッドを以下のようにオーバーライドしてみました。 ``` public void update(Graphics g){ System.out.println("呼ばれた!!"); g.clearRect(0,0,width,height) //widthとheightは自分の大きさ paint(g); } ``` そして再度実行してみると、repaint()メソッドを呼び出した部分では標準出力に"呼ばれた!!"と書かれるのですが、 ウィンドウの大きさを変えたときには標準出力には何も出力されませんでした。 以上のことから、ウィンドウの大きさを変更したときにはupdate()メソッドや、repaint()メソッドが呼ばれないのではないかと考えました。 しかし、再描画はされています。 上記のように、updateをオーバーライドしたプログラムに、 画面の大きさを常にアップレット上に文字列で表示するという昨日を追加してみたところ、やはりウィンドウの大きさを変えれば、その数値も変わっていきました。 しかし、標準出力には何も出力されませんでした。 これはすなわち、ウィンドウの大きさを変えたときも再描画はされているが、update()メソッドは呼ばれていないことだと考えました。 そこで質問です。ウィンドウの大きさを変えたときには、repaint()メソッドではない再描画メソッドが呼ばれるのでしょうか? また、それはどのようなメソッドなのでしょうか?
回答: > > ウィンドウの大きさを変えたときには、repaint()メソッドではない再描画メソッドが呼ばれるのでしょうか? > > > 再描画の際に必ず呼び出されるメソッドはpaintです。お気づきのようにupdateは呼び出されないこともあります。 再描画イベント -> (update) -> paint -> paintComponent etc. こんな感じで呼び出されるのですが、一般的にはpaintComponentをオーバーライドするのが作法です。それでは実装できない特別な場合のみpaintあるいは他のpaintXXXメソッドをオーバーライドするのがよいと思います。