オペレーティングシステムがモニタに何かを表示する場合、 まず、これから何色の描画をするかを決定し、その後その色で描画することによって実現されています。 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クラスによる描画は、その指定された色を使用して行われるようになります。

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オブジェクトを作成することです。