最終更新日: 1997 年 2 月 3 日
目的
プラットフォームのデスクトップ (Windows95、Solaris/CDE など) がデスクトップ上のオブジェクトに対して配色を提供することは一般的であり、通常、ユーザがこの配色を構成できます。通常、デスクトップで実行されるアプリケーションが、その配色を使用してビジュアルな一貫性を維持することが望まれます。
AWT は、そのコンポーネントに対して適当なデフォルト色を設定しようと試みますが、現在 Java プログラムがこれらの色を直接問い合わせて使用する便利な方法はありません。これは特に、バックグラウンド、影、およびフォント色をデスクトップの他の部分とすべて確実に適合させるような、カスタムコンポーネントを作成するときに問題になります。JavaTM プラットフォームのバージョン 1.1 と同様、AWT はこれらのデスクトップカラーにアクセスし使用するための簡単な API を提供します。
java.awt.SystemColor
SystemColor オブジェクトは、ほかの Color オブジェクトと同じように使用することができます。唯一の違いは、(ユーザが配色を変えた際、動的な通知をサポートするシステム上では) 現在の色を表す実際の値が動的に変わる可能性があるということです。
SystemColor オブジェクトはシステムが定義するため、Java プログラムがインスタンスを生成することはできません。
色の範囲
SystemColor クラスは、デスクトップ上の配色のそれぞれの型を表すシンボル色の標準セットを提供します。これらシンボル色オブジェクトは自動的に作成され、java.awt.SystemColor に静的に格納されます。
public final static SystemColor desktop; // デスクトップのバックグラウンド色
public final static SystemColor activeCaption; // キャプションのバックグラウンド色
public final static SystemColor activeCaptionText; // キャプションテキスト色
public final static SystemColor activeCaptionBorder; // キャプションテキストの境界色
public final static SystemColor inactiveCaption; // アクティブでないキャプションのバックグラウンド色
public final static SystemColor inactiveCaptionText; // アクティブでないキャプションのテキスト色
public final static SystemColor inactiveCaptionBorder; // アクティブでないキャプションの境界色
public final static SystemColor window; // ウィンドウのバックグラウンド
public final static SystemColor windowBorder; // ウィンドウ境界フレーム色
public final static SystemColor windowText; // ウィンドウ内のテキスト色
public final static SystemColor menu; // メニューのバックグラウンド
public final static SystemColor menuText; // メニューのテキスト色
public final static SystemColor text; // テキストのバックグラウンド色
public final static SystemColor textText; // テキストのテキスト色
public final static SystemColor textHighlight; // 強調表示されたテキストのバックグラウンド色
public final static SystemColor textHighlightText; // 強調表示されたテキストのテキスト色
public final static SystemColor control; // コントロールのバックグラウンド色
public final static SystemColor controlText; // コントロールのテキスト色
public final static SystemColor controlLtHighlight; // コントロールの明るい強調表示色
public final static SystemColor controlHighlight; // コントロールの強調表示色
public final static SystemColor controlShadow; // コントロールの影の色
public final static SystemColor controlDkShadow; // コントロールの暗い影の色
public final static SystemColor inactiveControlText; // アクティブでないコントロールのテキスト色
public final static SystemColor scrollbar; // スクロールバーのバックグラウンド色
public final static SystemColor info; // スポットヘルプテキストのバックグラウンド色
public final static SystemColor infoText; // スポットヘルプテキストのテキスト色
Java プログラムが、コンポーネントのフォアグラウンドかバックグラウンドのどちらかをこれらのシンボル色の 1 つに設定するか、またはこれらの 1 つをレンダリングに使用する場合、そのシンボル色の現在の値が使用されます。
すべてのプラットフォームが、これらのシンボル名のそれぞれに対して別個の色をサポートしているわけではありません。シンボル色をプラットフォームがサポートしていないケースでは、もっとも適当なデフォルトに割り当てられます。これらの色は null でないことが保証されます。
AWT ベースコンポーネントはこれらシンボル色を使用するように変更され、より一貫性のあるデスクトップとのデフォルト統合を提供します。コンポーネントのデフォルト色についてなんらかの仮定 (すなわち、「灰色」という仮定) を行なっている 1.0 用に書かれた Java プログラムは、1.1 の下では正しくレンダリングしない可能性があります。このため paint() メソッド内でそのバックグラウンドおよびフォアグラウンド色について、コンポーネントに問い合わせることが重要です。
一時更新とダイナミック更新の対比
ツールキットを最初にロードしたとき、最低これらの色は動的に初期化されます。あるデスクトップでは、動的更新機能を提供し、AWT はユーザによる配色の変更を検出し、これらのすべてのシンボル色を、ただちに更新します。しかし、これはプラットフォーム固有のもので、このインタフェースで保証された機能ではありません。
サンプルコード
この API を使用するカスタムコンポーネント (区切り記号) の例を次に示します。
import java.awt.*;
//
// Oversimplified separator class for creating 3D horizontal
// line separators
//
public class Separator extends Component {
public Separator(int length, int thickness) {
super();
setSize(length, thickness);
setBackground(SystemColor.control);
}
public void paint(Graphics g) {
int x1, y1, x2, y2;
Rectangle bbox = getBounds();
x1 = 0;
x2 = bbox.width - 1;
y1 = y2 = bbox.height/2 - 1;
g.setColor(SystemColor.controlShadow);
g.drawLine(x1, y2, x2, y2);
g.setColor(SystemColor.controlHighlight);
g.drawLine(x1, y2+1, x2, y2+1);
}
public static void main(String[] args) {
Frame f = new Frame("Separator Example");
f.setSize(200, 100);
f.setBackground(SystemColor.control);
Separator sep = new Separator(200, 4);
f.add("Center", sep);
f.show();
}
}