Inselraus: Die Farben des Systems über java.awt.SystemColor
Bei eigenen Java-Programmen ist es wichtig, dass diese sich so perfekt wie möglich in die Reihe der anderen Client-Programme einordnen, ohne großartig aufzufallen. Dafür muss ein Fenster die globalen Einstellungen wie den Zeichensatz und die Farben kennen. Für die Systemfarben gibt es die Klasse SystemColor, die alle Farben einer grafischen Oberfläche auf symbolische Konstanten abbildet. So ist SystemColor.text[1] die Hintergrundfarbe von Texteingabefeldern. Besonders praktisch ist dies bei Änderungen von Farben während der Laufzeit. Über diese Klasse können immer die aktuellen Werte eingeholt werden, denn ändert sich beispielsweise die Hintergrundfarbe der Laufleisten, ändert sich damit auch der RGB-Wert.
Die Systemfarben sind Konstanten von Typ SystemColor, was eine Unterklasse von Color ist. Damit lassen sich sich direkt nutzen, etwa über setColor(Color) oder über getRGB() der RGB-Anteil erfragen. Die Klasse SystemColor hat keine eigenen öffentlichen Methoden, sondern überschreibt nur toString().
Die Klasse deklariert die folgenden statischen finalen Variablen:
class java.awt.SystemColor extends Color implements Serializable
SystemColor
Welche Farbe darauf anspricht
desktop
Farbe des Desktop-Hintergrunds
activeCaption
Hintergrundfarben für Text im Fensterrahmen
activeCaptionText
Farbe für Text im Fensterrahmen
activeCaptionBorder
Rahmenfarbe für Text im Fensterrahmen
inactiveCaption
Hintergrundfarbe für inaktiven Text im Fensterrahmen
inactiveCaptionText
Farbe für inaktiven Text im Fensterrahmen
inactiveCaptionBorder
Rahmenfarbe für inaktiven Text im Fensterrahmen
window
Hintergrundfarbe der Fenster
windowBorder
Rahmenfarbe der Fenster
windowText
Textfarbe für Fenster
menu
Hintergrundfarbe für Menüs
menuText
Textfarbe für Menüs
text
Hintergrundfarbe für Textkomponenten
textText
Textfarbe für Textkomponenten
textHighlight
Hintergrundfarbe für hervorgehobenen Text
textHighlightText
Farbe des Texts, wenn dieser hervorgehoben ist
textInactiveText
Farbe für inaktiven Text
control
Hintergrundfarbe für Kontrollobjekte
controlText
Textfarbe für Kontrollobjekte
controlHighlight
normale Farbe, mit der Kontrollobjekte hervorgehoben werden
controlLtHighlight
hellere Farbe, mit der Kontrollobjekte hervorgehoben werden
controlShadow
normale Hintergrundfarbe für Kontrollobjekte
controlDkShadow
dunklerer Schatten für Kontrollobjekte
scrollbar
Hintergrundfarbe der Schieberegler
Info
Hintergrundfarbe der Hilfe
infoText
Textfarbe der Hilfe
Konstanten der Systemfarben
Hinweis: Die Klasse javax.swing.UIManager ist ein großer Assoziativspeicher, bei dem sich weitere Belegungen erfragen lassen. Es erfragt zum Beispiel UIManager.getColor("Table.background") die Tabellen-Hintergrundfarbe vom gerade eingestellen Look and Feel.[2]
[1] Sun verstößt mal wieder gegen die eigenen Namenskonventionen. Die finalen Variablen – Konstanten – sollten großgeschrieben werden. Das funktioniert bei den SystemColor-Objekten aber nicht, da es alle Bezeichnernamen schon in Großbuchstaben gibt, und zwar für Variablen vom Typ Byte, die Verweise in eine interne Tabelle darstellen.
[2] Die Seite liefert eine Auflistung der Schlüssel und ein Programm zur Anzeige.