paintメソッドとGraphics


では、コンポーネントに描画を行うのに用いる「paint」メソッドというのはどういうものなのでしょうか。ここでその基本的な形を理解しておきましょう。

public void paint(Graphics g){
  ・・・ここに描画処理を書く・・・
}


これが、paintメソッドの基本形です。Frame継承クラスなどにこのメソッドを用意すれば、必要に応じて呼び出され画面に描画されるわけです。このメソッドは、引数に「Graphics」というクラスのインスタンスを持っています。これはjava.awtパッケージにあるクラスで、画面描画のための機能を一通りもったクラスです。ここに用意されている描画用のメソッドを呼び出すと、そのコンポーネントに描画がなされます。――では、実際に簡単な描画を行ってみましょう。

import java.awt.*;

public class Sample extends Frame {

  public static void main(String[] args) {
    new Sample();
  }
  
  public Sample(){
    this.setSize(300,250);
    this.setVisible(true);
  }
  
  public void paint(Graphics g){
    g.drawRect(10,60,280,180);
    g.drawRect(20,70,260,160);
    g.fillOval(100,100,100,100);
  }
  
}
サンプルを実行すると、四角い枠の中に円を描いたウインドウが現れます。


例によってプログラム終了の処理はないので強制終了して終えてください。これを実行すると、2重の四角い枠線の中に黒い円が表示されます。プログラムがどんな形になっているかよく見てみましょう。クラスは、extends FrameというようにFrameを継承して作っていますね。また「コンストラクタ」というメソッドで大きさを設定し表示させています。これらは既にAWTの使い方として説明したものです。よくわからない人は本連載の「AWTのコンポーネントを使おう」を読み返しておきましょう。

肝心の描画を行っているのが「paint」メソッドですね。ここでは引数のGraphics(変数g)を使って描画を実行しています。ここでは「drawRect」「fillOval」というメソッドを呼び出しています。これらは、枠線だけの四角形を描くメソッドと、中を塗りつぶした楕円を描くメソッドです。以下に主な図形を描くメソッドを紹介しておきましょう。

●枠線だけの長方形を描く
[Graphics].drawRect( 横位置,縦位置,横幅,縦幅 );


●中を塗りつぶした長方形を描く
[Graphics].fillRect( 横位置,縦位置,横幅,縦幅 );


●枠線だけの楕円を描く
[Graphics].drawOval( 横位置,縦位置,横幅,縦幅 );


●中を塗りつぶした長方形を描く
[Graphics].fillOval( 横位置,縦位置,横幅,縦幅 );


●2つの点を結ぶ直線を描く
[Graphics].drawLine( 横位置1,縦位置1,横位置2,縦位置2 );


とりあえずこれらのメソッドがわかれば、簡単な図形は描けるようになりそうですね。引数には、それぞれ位置や大きさを示すための整数を指定します。例えば、drawRect(10,60,280,180)というのは、横10、縦60ドットの位置に、横幅280、縦幅180ドットの大きさの枠線だけの長方形を描く」というものだったわけです。

位置や大きさは、実際にいろいろと数字を変えて描画をしてみれば、自然と感覚がつかめてくるはずです。ともかく上のサンプルを自分なりに修正して、図形の描画に慣れておきましょう。