色の表現


色を変更する

ここでは、アプレットをカラフルに、実用的にするのに欠かせないの扱いを覚えましょう
いろんな色の表現ができるようになれば、これまでよりずっと華やかなアプレットになります

色を表現するにはjava.awt.Colorクラスを使用します
このクラスは色をRGB形式でカプセル化します
RGB形式は、おなじみの「赤」「緑」「青」の三色であらゆる色を表現する形式です
ひとつの色に8ビットを用いて0〜0xff、すなわち255までの値で指定します

Colorクラスのコンストラクタは次のとおりです

public Color( int r, int g, int b )
public Color( int rgb )
public Color( float r, float g, float b )

一番上のコンストラクタは、純粋に3つの色をRGB形式で指定します
r = 赤 、g = 緑 、b = 青 、で0〜255までの値で指定します

二番目のコンストラクタは、RGB値を指定します
これは、赤 = 16〜23ビット、緑 = 8〜15、青 = 0〜7ビットで表現されます
通常は10進数で指定するような愚かな真似はしません
同クラスのgetRGB()メソッドなどから返されたRGB値を使用します

参番目のコンストラクタは、0.0f〜1.0fまでの値で指定します
いずれかの方法で、Colorクラスのインスタンスを生成することができます

Graphicsクラスには、現在の色を取得するgetColor()メソッドと
色を新たに設定するsetColor()メソッドが存在します

public abstract Color getColor()
public abstract void setColor( Color c )

見てわかるように、Colorオブジェクトを受け取ったり返したりすることができます
getColor()メソッドは、指定されたオブジェクトの現在の色のColorオブジェクトを返します
setColor()メソッドはColorクラスのオブジェクトを受け取り、そのオブジェクトの色を設定します
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

/*<applet code="App8.class" width="400" height="200"></applet>*/

public class App8 extends Applet {
	public void paint(Graphics g) {
		Color defCo = g.getColor();

		g.setColor(new Color(0xff << 8));
		g.fillOval(20 , 20 , 80 , 80);

		g.setColor(new Color(0.0f , 0.0f , 1.0f));
		g.fillRoundRect( 100 , 100 , 50 , 50 , 20 , 20 );

		g.setColor(new Color(255 , 0 , 0));
		g.fillArc(200 , 60 , 190 , 100 , 80 , - 230);

		g.setColor(defCo);
		g.drawRect(10 , 10 , 380 , 180);
	}
}
アプレット

おお!?
どうでしょうか、少しだけカラフルになりましたね

g.setColor(new Color(0xff << 8)); はRGB値を指定しています
RGB値で緑を指定するには、8〜15ビットまでが1であれば良いので255を右に8ビットシフトしています

g.setColor(new Color(0.0f , 0.0f , 1.0f)); はfloat型のコンストラクタを指定しています
これ以降は説明不用でしょう


また、Colorクラスは良く使われる代表的な色の定数を用意しています
筆者は定数を覚えるのが面倒なので、0〜255の方法でセットしていますが
数値が嫌いという方は、定数で指定しても良いでしょう
実際には、良く使われる方法です
ひじょ〜〜〜〜〜〜〜〜に、ありがちで気が引けるんですが
これらの色を確認するアプレットを作ってみましょう
たいていの入門書にも書いてますが、Color型の配列変数を作成し
その中に各定数を代入します。で、それをループでコンポーネントに描画します
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;

/*<applet code="App9.class" width="400" height="200"></applet>*/

public class App9 extends Applet {
	public void paint(Graphics g) {
		int x = 0;
		Color co[] = { Color.black , Color.blue , 
			Color.cyan , Color.darkGray ,
			Color.gray , Color.green ,
			Color.lightGray , Color.magenta ,
			Color.orange , Color.pink ,
			Color.red , Color.white , 
			Color.yellow
		};
		for (int count = 0 ; count < 13 ; count++) {
			g.setColor(co[count]);
			g.fillRect(x , 0 , 30 , 200);
			x += 30;
		}
	}
}
アプレット

うわ〜、ありがちでしたね
左の黒から、黄色まで、これらの色が定数としてColorクラスに用意されています


システムカラーを使う

システムカラーを取得して、その色を指定することもできます
システムカラーを利用すれば、ユーザーが独自のプラットフォームのレイアウトで
あなたのアプリケーション(もしくはアプレット)を利用することができます

システムカラーを得るにはjava.awt.SystemColorクラスにパッケージ化されている定数を使用します
このクラスには、あらゆるGUIオブジェクトのシステムカラーの情報がパッケージ化されています

プラットフォームに適切なシステムカラーの値がない場合でも
それぞれの定数にデフォルトの値が与えられているので、最低限のレイアウトを保証しています

SystemColorクラスの定数は沢山あるので、ここでは紹介しません
お手元のリファレンス等を参照してください
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.SystemColor;

/*<applet code="test.class" width="400" height="200"></applet>*/

public class test extends Applet {
        public void paint(Graphics g) {
                g.setColor(SystemColor.control);
                g.fillRect(0 , 0 , 400 , 200);
        }
}
設定でオブジェクトの色を変更すると、得られる値が変更します
ぜひ試してください



前のページへ戻る次のページへ