last modified: Feb./2nd/2002

前節では、描画するための道具一式である java.awt.Graphics オブジェクトに java.awt.Font オブジェクトとして作成したフォントをセットしました。

本節では、 java.awt.Color オブジェクトとして作成した色をセットします。

色の作成方法

色は java.awt.Color クラス型のオブジェクトとして作成します。

java.lang.Object
  |
  +--java.awt.Color

色を使うときは、 java.awt.Color クラスをインポートする必要があります。

色の RGB 指定

色の指定は、原則的には色の三原色 (sRGB: Red, Green, Blue) の強度(アルファ値)を三つの数値を用いて指定します。数値の指定方法では、整数値 (int) で 0-255 か、浮動小数点数値 (float) で 0F-1.0F として指定します。こうして作った Color 型オブジェクトを Graphics 型オブジェクトにセットするわけです。

また、フィールド(静的メンバ変数)で色名が13色定義されているので、これを Color 型オブジェクトとして用いることもできます。

サンプル

//薄い青緑
Color c1 = new Color(0.5F, 0.8F, 0.8F);
//薄い紫
Color c2 = new Color(220, 100, 220);
//マゼンタ
Color c3 = Color.magenta;
	Color 型変数 c3 にオブジェクトの参照をコピーしています

色名

Java 2 SDK 1.3 で定義されている色名は以下の13色です。

修飾子と型フィールド意味
static Colorblack 黒を表します。
static Colorblue 青を表します。
static Colorcyan シアンを表します。
static ColordarkGray ダークグレイを表します。
static Colorgray グレイを表します。
static Colorgreen 緑を表します。
static ColorlightGray ライトグレイを表します。
static Colormagenta マゼンタを表します。
static Colororange オレンジを表します。
static Colorpink ピンクを表します。
static Colorred 赤を表します。
static Colorwhite 白を表します。
static Coloryellow 黄を表します。

これらのフィールド(メンバ変数)は static 宣言されたクラス変数(静的メンバ変数)なので、インスタンス化することなく使えます(インスタンス変数ではない)。変数の型は Color クラス型なので、インスタンス化した Color クラス型オブジェクトとまったく同様に使うことができます。

サンプル

次の例では、 init() メソッドでアプレットの背景色と前景色(描画色)を setBackground(), setForeground() メソッドで指定しています。これらのメソッドの引数は、 java.awt.Color クラス型のオブジェクトです。これらのメソッドは、 java.applet.Applet クラスのスーパークラス java.awt.Component で実装されています。

描画内容は paint() メソッドで実装されていますが、描画色は java.awt.Graphics クラスのメソッド setColor() で指定しています。このメソッドの引数も Color クラス型のオブジェクトです。このメソッドが指定されていない場合は、描画対象のコンポーネントの setForeground() で指定された Color オブジェクトが使われます。

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Font;
 /*- java.awt パッケージに含まれるクラスを
  *  三つ個別にインポートしています。
  *  ワイルドカードを用いて、
  *  	import java.awt.*;
  *  としたほうが普通です。
  */

public class ColorTest extends Applet {

	//アプレットの初期化
	public void init() {
		//RGB を 0F-1.0F で指定
		Color bgc = new Color(0.2F,0.2F,0.5F);
		//実行中のアプレットの背景色を指定
		this.setBackground(bgc);
		//RGB をフィールドで指定
		Color fgc = Color.white;
		//実行中のアプレットの前景色を指定
		this.setForeground(fgc);
	}
	
	//paint() メソッドの実装
	public void paint(Graphics gs) {

		//フォントを指定
		gs.setFont(new Font("Monospaced", Font.BOLD, 30));
		
		//文字描画
		gs.drawString("Hello world!", 20, 40);

		//RGB を 0-255 で指定
		Color fc1 = new Color(150, 150, 255);
		//Graphics オブジェクト gs に描画色を指定
		gs.setColor(fc1);
		//文字描画
		gs.drawString("How A U?", 20, 80);
		
		//gs に描画色を設定
		gs.setColor(Color.yellow);
		//楕円描画
		gs.drawOval(30,20, 180,100);

		//gs に描画色を指定
		gs.setColor(new Color(255, 150, 150));
		//文字描画
		gs.drawString("Bye world!", 20, 120);
	}
}

paint() メソッドは、 init(), start() に続いて自動的に実行されます。ブラウザはこのアプレットを読み込んでインスタンス化するときに、 paint() メソッドに引数として java.awt.Graphics 型オブジェクトを渡します。

<p><applet code="ColorTest.class" width="230" height="140">
アプレットが実行できない場合の代替内容。
</applet></p>
アプレットが実行できない場合の代替内容。
アプレット:ColorTest.class

描画内容が重なる場合は、 paint() メソッド内で後ろの行で描画 (drawXX()) したものの方が前に描画されます。上のサンプルでは、楕円と文字列に重なっていますが、最初の二つの文字列は楕円よりも後ろに描画されており、三つ目の文字列は楕円よりも前 (front) に描画されています。



Copyright © 2001 SUGAI, Manabu. All Rights Reserved.