目次> 第16章> 16.2 TOPUPPREVNEXT

16.2 Swing コンポーネントの描画

Swing コンポーネント上に描画するには、 描画したいコンポーネントのクラスを継承したクラスで、 メソッド paintComponent(Graphics g) をオーバーライドし、 パラメータで渡された g に対して Graphics クラスのメソッドで描画をします。

オーバーライドした paintComponent の先頭で、このコンポーネントの土台を描画するために、 super.paintComponent(g) を呼び出しておきます。

paintComponent は、このコンポーネントの描画が必要になったとき ( たとえば最初に表示する時、最小化した後の再表示、 他のウィンドウの下に隠れた後に再度アクティブになった時、 コンポーネントのサイズが変更された時 等)Javaシステムから呼び出されます。

paintComponentをプログラムから呼び出してはいけません。描画をしたい場合は、 paintComponent をオーバーライドしたクラスの repaint() メソッドを呼び出します。

【例1】

直線と円を書いてみましょう。

page-16-2.gif

ソース・プログラム Graph7.java

描画の手順

  1. java.awt.Graphics を import しましょう。(3行目)
  2. JPanel を 継承したクラスを宣言します。(6行目〜)
  3. public void paintComponent(Graphics g) を 定義します。(14行目〜)
  4. super.paintComponent() で JPanel の部分の描画をします。(15行目)
  5. g に対して色の設定、描画をします(16〜19行目)

最小化したり、他のウィンドウの下に隠したりした後、 再表示をして画がくずれないことを確認してください。画面のサイズを変えてみましょう。 また、15行目をコメントにすると何がおきるかを確認しましょう。

【例2】

マウスでクリックした場所に円を書いてみましょう。

page-16-3.gif

ソース・プログラム Graph8.java

プログラムの概要

  1. JPanel を継承したクラスを定義します。(6行目〜)
  2. マウスリスナの実装する旨を宣言します。(7行目)
    implements MouseListener を書くことによって、 27〜39行目に書いた mouse... というメソッドが マウスリスナのメソッドとして認識されるようになります。

    MouseListener インターフェースを実装するクラスで 定義しなければならないメソッドは次の5つです。

    • mouseEntered ― マウスがコンポーネントの中に入った時の処理を記述する。
    • mouseExited ― マウスがコンポーネントの外に出た時の処理を記述する。
    • mousePressed ― マウス・ボタンが押された時の処理を記述する。
    • mouseReleased ― マウス・ボタンが離された時の処理を記述する。
    • mouseClicked ― マウスがクリックされた時の処理を記述する。 ボタンを押した場所と離した場所が異なる(ドラッグした)場合 には呼ばれない。
    このプログラムではマウスが押された時に円を書き、 それ以外は何もしないことにします。
  3. マウスがクリックされた位置を保存する変数を宣言します。(8〜9行目)
    クリックが一回もされていないことを示すために、x の初期値を負にしておく。
  4. コンストラクタの宣言。マウスリスナを登録し、背景色を設定します。(14〜17行目)
  5. paintComponent の宣言(19〜25行目)
  6. 親(JPanel)を描画します。(20行目)
  7. 最初にマウスボタンが押される前は描画しない(21行目)
  8. 描画色を設定し、円を描画します(22〜23行目)
  9. マウスボタンが押された場合の処理(33〜37行目)
  10. マウスカーソルがある位置を取得し、変数に保存(34〜35行目)
  11. このコンポーネントを描画する(36行目)
    repaint を呼び出すと、このコンポーネントの Graphics をパラメータにして、 上記の paintComponent がコールバックされます。
  12. それ以外の MouseListener の メソッドでは何もしません。(27〜31、39行目)
  13. main メソッドでウィンドウを作成し(42〜45行目)、 このパネルGraph8 を生成し、ウィンドウに貼り付けます(46行目)。 ウィンドウの大きさを200×200ピクセルにし表示します(47〜48行目)。


更新日:2003-11-27 TOPUPPREVNEXT