トップ 一覧 置換 検索 ヘルプ RSS ログイン

paint と paintComponentの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
http://questionbox.jp.msn.com/qa5266962.html

awt と swing コンポーネントの描画関数の違い。

!awt
*Panel や Frame、Canvas を継承して paint メソッドをオーバーライドする。
*updateメソッドは、画面のクリアを行う(クリアしたくない場合は、オーバーライドする)
*ダブルバッファリングはプログラマが行う

!swing
*JPanel  を継承して paintComponent をオーバーライドする。
*paintComponent内では、 super.paintComponent を呼んだ方が無難。
*updateメソッドは、画面のクリアを行わない
*コンポーネント側でダブルバッファリングを行う(不要な場合は setDoubleBuffered で設定する)

以下、理由
Swingでは、コンポーネントの描画はかなり複雑になっている。AWTでは、repaintが呼ばれると、 updateが呼ばれた後、paintが呼ばれる。が、Swingでは、paing内で更にpaintComponentによってコンポーネントが描画され、それからpaintBorderでボーダーが描画され、最後にpaintChildrenによって内包するコンポーネントの描画が呼び出される、という仕組みになっている。

{{category2 プログラミング言語,Java}}