背景を指定の色でクリアする

広告

図形の描画方法を確認する前に領域の背景を指定の色でクリアする方法を確認していきます。背景をクリアするにはGraphics2Dクラスの親クラスであるGraphicsクラスで用意されている「clearRect」メソッドを使います。

指定された矩形を、現在の描画表面のバックグラウンドカラーで塗りつぶすこ
とによりクリアします。この操作は、現在のペイントモードを使いません。

Java 1.1 以降は、オフスクリーンのイメージのバックグラウンドカラーはシス
テムにより異なります。アプリケーションは setColor に続けて fillRect を
使うことによって、オフスクリーンイメージをクリアして特定の色にすること
を保証します。 

パラメータ:
  x - クリア対象の矩形の x 座標
  y - クリア対象の矩形の y 座標
  width - クリア対象の矩形の幅
  height - クリア対象の矩形の高さ

1番目から4番目までの引数を使って(x, y)-(x + width, y + height)の領域を指定のバックグラウンドカラーで塗りつぶします。

領域全体をクリアするには幅及び高さについて描画対象のコンポーネントの大きさを取得する必要があります。JComponentクラスで用意されている「getWidth」メソッドと「getHeight」メソッドを使います。

getWidth:

このコンポーネントの現在の幅を返します。このメソッドは、ヒープの割り当
てが発生しないので、component.getBounds().width または 
component.getSize().width よりも適切です。 

戻り値:
  このコンポーネントの現在の幅

getHeight:

このコンポーネントの現在の高さを返します。このメソッドは、ヒープの割り
当てが発生しないので、component.getBounds().height または 
component.getSize().height よりも適切です。 

戻り値:
  このコンポーネントの現在の高さ

具体的には次のように記述します。

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

  g2.clearRect(0, 0, getWidth(), getHeight());
}

背景色の指定

塗りつぶす色を指定するにはGraphics2Dクラスで用意されている「setBackground」メソッドを使います。

Graphics2D コンテキストのバックグラウンドカラーを設定します。バックグラ
ウンドカラーは、領域をクリアするために使われます。Graphics2D を Component
用に作成すると、バックグラウンドカラーが Component から継承されます。
Graphics2D コンテキストでのバックグラウンドカラーを設定しても、それ以降
の clearRect() 呼び出しに作用するだけで、Component のバックグラウンドカ
ラーには影響を及ぼしません。Component のバックグラウンドを変更するには、
Component の適切なメソッドを使用します。

パラメータ:
  color - 以降の clearRect の呼び出しで 使用されるバックグラウンドカラー

引数に背景を塗りつぶす色として指定したいColorクラスのオブジェクトを指定します。Colorクラスについては『Colorクラス』を参照して下さい。

具体的には次のように記述します。

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

  g2.setBackground(Color.PINK);
  g2.clearRect(0, 0, getWidth(), getHeight());
}

サンプルプログラム

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

Graphics2DTest5.java

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

public class Graphics2DTest5 extends JPanel{

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

    Graphics2DTest5 app = new Graphics2DTest5();
    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){
    Graphics2D g2 = (Graphics2D)g;

    g2.setBackground(Color.PINK);
    g2.clearRect(0, 0, getWidth(), getHeight());
  }
}

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

背景を指定の色で塗りつぶす

( Written by Tatsuo Ikura )