WisdomSoft - for your serial experiences.

3.3 色を指定する

描画する図形の色は Color クラスで表します。RGB 色要素の組み合わせで任意の色を作成し、その色で図形を描画します。

3.3.1 Color クラス

これまで描画してきた図形はすべて黒色でしたが、当然カラーディスプレイの環境では他の色で描画することを要求されるでしょう。Graphics クラスのメソッドが描画する図形は、Graphics オブジェクトに選択されている現在の色が使われています。この設定は setColor() メソッドで変更することができ、getColor() メソッドで現在の色を取得することができます。

Graphics クラス getColor() メソッド
public abstract Color getColor()
Graphics クラス setColor() メソッド
public abstract void setColor(Color c)

Color クラスは色に関する情報を提供します。Java では他のシステムでも一般的な RGB モデルが基本的な色モデルとして採用されています。このモデルは、色の要素が赤、緑、青で構成され、それぞれの要素がどのくらいの強さかを 0 ~ 255 までの数値で表します。全ての要素が 0 であれば黒、全ての要素が 255 であれば白を表します。これらの要素はそれぞれが 1 バイトで構成されているため int 型の 32 ビットのうち、24 ビットでまとめて表現することもできます。 32 ビットで表現する場合は下位バイトから青、緑、赤という順番になります。16進数を使えば非常にわかりやすいでしょう。赤色は 0xFF0000 緑色は 0x00FF00、青は 0x0000FF と表現することができます。これらの要素を組み合わせることで様々な色を作ることができますが、実際に色を描画する際には出力デバイスが表現できる色の範囲に制限されるでしょう。

Color() コンストラクタはオーバーロードされていますが、特に代表的なものは次のコンストラクタです。

Color() クラスのコンストラクタ
public Color(int rgb)
public Color(int r, int g, int b)
public Color(float r, float g, float b)

具体的な色表現については、Swing の学習ではなく Java 2D API の分野になるため本書の役割を超えてしまいます。本書では、これらの基本的な表現しか用いません。1 つの int 型の引数のみを受け取るコンストラクタは rgb に 24 ビットで表現した色を指定します。3 つの int 型を受け取るコンストラクタでは先頭から赤、緑、青要素の成分を表す 0 ~ 255 までの値をそれぞれ指定します。最後の float 型のコンストラクタは 0 ~ 255 ではなく 0.0 ~ 1.0 までの範囲で色の強さを表したい場合に利用することができます。パーセントで色の強さを表現している場合に便利でしょう。

Color オブジェクトが表す色を取得するには getRGB() メソッドを使います。各要素ごとに取得したい場合は getRed() メソッドgetGreen() メソッドgetBlue() メソッドで得ることができます。Color オブジェクトは、逆に色を設定するということはできません。新しい色を作る場合は、コンストラクタを呼び出して新しいオブジェクトを作らなければなりません。

Color クラス getRGB() メソッド
public int getRGB()
Color クラス getRed() メソッド
public int getRed()
Color クラス getGreen() メソッド
public int getGreen()
Color クラス getBlue() メソッド
public int getBlue()

Color オブジェクトを正しく生成することができれば、Graphics オブジェクトの現在の色を変更してカラフルな図形を実現することができます。

コード1
import java.applet.Applet;
import java.awt.*;

//<applet code="Test.class" width="400" height= "400" VIEWASTEXT></applet>

public class Test extends Applet {
	public void paint(Graphics g) {
		g.setColor(new Color(0xFF0000));
		g.fillRoundRect(10 , 10 , 80 , 80 , 20 , 20);

		g.setColor(new Color(0x305524));
		g.fill3DRect(100 , 10 , 80 , 80 , false);
	}
}
実行結果
コード1 実行結果

コード1の実行結果を見れば、fillRoundRect() メソッドと fill3DRect() メソッドで描画した色がそれぞれ異なっていることを確認することができます。fillRoundRect() を呼び出す手前で setColor() メソッドを呼び出し現在の色を変更しています。fill3DRect() も同様に、現在の色を変更指定から描画しているため、メソッドに渡した Color オブジェクトが表す色で描画されているのです。

この他に Color クラスは基本的な色を表す static final フィールドを公開しています。赤色ならば Color.RED、白は Color.WHITE、黒は Color.BLACK というように指定することもできます。