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 http://www.devdaily.com/java/java-uimanager-color-keys-list liefert eine Auflistung der Schlüssel und ein Programm zur Anzeige.