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 クラスをインポートする必要があります。
色の指定は、原則的には色の三原色 (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 Color | black |
黒を表します。 |
static Color | blue |
青を表します。 |
static Color | cyan |
シアンを表します。 |
static Color | darkGray |
ダークグレイを表します。 |
static Color | gray |
グレイを表します。 |
static Color | green |
緑を表します。 |
static Color | lightGray |
ライトグレイを表します。 |
static Color | magenta |
マゼンタを表します。 |
static Color | orange |
オレンジを表します。 |
static Color | pink |
ピンクを表します。 |
static Color | red |
赤を表します。 |
static Color | white |
白を表します。 |
static Color | yellow |
黄を表します。 |
これらのフィールド(メンバ変数)は 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) に描画されています。