GraphicsクラスとpaintComponentメソッド

広告

Swingを使って描画処理を行うには「paintComponent」メソッドを書き換えることで実現します。「paintComponent」メソッドはJComponentクラスで定義されているメソッドでありコンポーネントの描画が必要になった時に内部的に呼び出されるメソッドです。

public void paintComponent(Graphics g){

}

「paintComponent」メソッドの中に描画に関する処理を記述しておくことで、画面描画が必要になって「paintComponent」メソッドが呼ばれる度に描画処理が実行されます。

よく使われる記述方法としてはJComponentクラスのサブクラスを継承したクラスを作成し、そのクラスの中で「paintComponent」メソッドを書き換えます。これ以降のサンプルではJPanelを継承したクラスを作成して利用しています。(JFrameはJComponentクラスのサブクラスではありませんのでJFrameクラスを継承したクラスを使う場合には別途描画対象となるコンポーネントを用意する必要があります)。

色々な図形を描画したり、文字を描画するには「paintComponent」メソッドの引数である「Graphics」クラスのオブジェクトに対して行います。

サンプル

簡単なサンプルを一度試してみます。

Graphics2DTest1.java

import javax.swing.*;
import java.awt.Graphics;
import java.awt.Color;

public class Graphics2DTest1 extends JPanel{

  public static void main(String[] args){
    JFrame frame = new JFrame();

    Graphics2DTest1 app = new Graphics2DTest1();
    frame.getContentPane().add(app);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setBounds(10, 10, 300, 200);
    frame.setTitle("タイトル");
    frame.setVisible(true);
  }

  public void paintComponent(Graphics g){
    g.setColor(Color.red);
    g.fillRect(40, 20, 200, 120);

    g.setColor(Color.blue);
    g.drawString("Hello Java2D", 10, 50);
  }
}

上記をコンパイルした後で実行すると次のように表示されます。

GraphicsクラスとpaintComponentメソッド

今回のサンプルのように「paint」メソッドの引数として渡されてくるGraphicsクラスのオブジェクトに対して、数多く用意されているメソッドを使って長方形を塗りつぶしたり文字列を描画しています。

Graphics2Dクラス

以前はこのようにGrapchisクラスのオブジェクトを使っていましたがGraphics2Dクラスというより機能が強化されたクラスが用意されました。Graphics2DクラスはGraphicsクラスのサブクラスでありGraphicsクラスのオブジェクトをGraphics2Dクラスのオブジェクトにキャストして利用します。

public void paintComponent(Graphics g){
  Graphics2D g2 = (Grahpics2D)g;
  
}

そしてGraphics2Dクラスのオブジェクトに対して描画処理を記述していくことになります。では次のページから描画処理の記述方法について詳しく確認していきます。

( Written by Tatsuo Ikura )