<更新記録>
2007年 12月 16日
執筆

姉妹サイト検索 Web検索


Color

Color

オペレーティングシステムがモニタに何かを表示する場合、 まず、これから何色の描画をするかを決定し、その後その色で描画することによって実現されています。 Eclipse APIの描画作業でも、これと同じことを行います。 Colorクラスは、オペレーティングシステム上のカラーリソースを表します。

Colorクラスを作成するためのコンストラクタは、2つ用意されています。

Color(Device device, int red, int green, int blue)
Color(Device device, RGB rgb)
どちらも、第1引数にDeviceオブジェクトを要求します。 ここに指定できるのは、Deviceインターフェイスを継承したクラスである、 DisplayクラスのオブジェクトまたはPrinterクラスのオブジェクトのどちらかです。 Displayクラスは、モニタに出力するための、Printerクラスは、プリンタへ出力するためのクラスです。

そしてどちらのコンストラクタも、光の3原色を引数に要求します。 RGBクラスは、光の3原色を表すクラスです。 この引数によって、作成されるColorオブジェクトの色が決定されます。

作成されたColorオブジェクトは、GCクラスのsetForegroundメソッドかsetBackgroundメソッドで指定することができます。 指定したらそれ以降、GCクラスによる描画は、その指定された色を使用して行われるようになります。

Gradation.java
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class Gradation {
	private static final short WIDTH = 100;
	private static final short HEIGHT = 100;
	
	public static void main(String[] args) {
		Display display = new Display();
		Shell shell = new Shell(display);
		
		Canvas canvas = new Canvas(shell, SWT.NONE);
		canvas.setBounds(0, 0, WIDTH, HEIGHT);
		
		shell.pack();
		shell.open();
		
		GC gc = new GC(canvas);
		// 赤色を作成
		Color red = new Color(display, 0xFF, 0x00, 0x00);
		gc.setBackground(red);
		
		for (float i=0 ; i < HEIGHT ; i++) {
			// カラーリソース作成
			Color color = new Color(display, (int)(i / HEIGHT * 0xff), 0x00, 0x00);
			// カラーをGCにセット
			gc.setForeground(color);
			// 描画
			gc.drawLine(0, (int)i, WIDTH, (int)i);
			// カラーリソースを開放
			color.dispose();
		}
		
		
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		
		display.dispose();
	}
}

システムカラー

Colorクラスを作成して色を作成するには、1つ色を作成する度に1つのシステムリソースを消費します。色を割り当てるための時間も若干掛かります。 しかし、システムカラーを使用すれば、システムリソースを消費せずにColorオブジェクトを取得することができます。

システムカラーとは、オペレーティングシステムが普段からそのオペレート作業をこなすにあたり使用している、 16色の色 です。 これらの色は、頻繁に使用されるため、オペレーティングシステムが動作し続ける限り、オペレーティングシステムによって、 ずっと保持し続けられています。

Display#getSystemColor(int) メソッドを呼び出すことで、このシステムカラーをEclipse APIを通して取得することができます。 引数に指定するint型の数値は、色を表します。 色は、以下のものから選ぶ必要があります。

SWT.COLOR_BLACK
SWT.COLOR_DARK_GRAY
SWT.COLOR_GRAY
SWT.COLOR_WHITE
SWT.COLOR_RED
SWT.COLOR_DARK_RED
SWT.COLOR_MAGENTA
SWT.COLOR_DARK_MAGENTA
SWT.COLOR_YELLOW
SWT.COLOR_DARK_YELLOW
SWT.COLOR_GREEN
SWT.COLOR_DARK_GREEN
SWT.COLOR_CYAN
SWT.COLOR_DARK_CYAN
SWT.COLOR_BLUE
SWT.COLOR_DARK_BLUE
逆に言えば、これら以外の色を選ぶことはできません。 最もスマートなプログラミングは、必要な色のうち、システムカラーで提供されているものはそれを使い、 そうでないものは自分でColorオブジェクトを作成することです。


Powered by VeryEasyCMS