Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 25 - Farben

## 25.4 Systemfarben

- 25.4 Systemfarben

Um ihren Anwendungen ein einheitliches Look-and-Feel zu geben, definieren grafische Oberflächen in der Regel eine Reihe von Systemfarben. Diese können im Programm verwendet werden, um beispielsweise die Farbe des Hintergrunds oder die von Dialogelementen konsistent festzulegen. Während es in früheren Versionen von Java keine Möglichkeit gab, auf Systemfarben zuzugreifen, steht diese Möglichkeit mit der Klasse `SystemColor` im JDK 1.1 portabel zur Verfügung.

`SystemColor` ist aus `Color` abgeleitet und unterscheidet sich von ihr vor allem durch die Fähigkeit, die Farbe dynamisch zu ändern. Dieses Feature ist auf Systemen interessant, die eine Nachricht an die Anwendung senden, wenn sich eine Systemfarbe geändert hat. Wir wollen an dieser Stelle nicht näher darauf eingehen.

Die Klasse `SystemColor` stellt eine Reihe von vordefinierten Farben zur Verfügung, die zu den entsprechenden Systemfarben des Desktops korrespondieren. Da `SystemColor` aus `Color` abgeleitet ist, können diese leicht anstelle eines anwendungsspezifischen `Color`-Objekts verwendet werden, wenn eine einheitliche Farbgebung gewünscht ist. Tabelle 25.2 gibt eine Übersicht dieser Farben.

Farbkonstante | Bedeutung
`SystemColor.desktop` | Hintergrundfarbe des Desktops
`SystemColor.activeCaption` | Hintergrundfarbe für die Titelleiste von selektierten Fenstern
`SystemColor.activeCaptionText` | Schriftfarbe für die Titelleiste von selektierten Fenstern
`SystemColor.activeCaptionBorder` | Rahmenfarbe für die Titelleiste von selektierten Fenstern
`SystemColor.inactiveCaption` | Hintergrundfarbe für die Titelleiste von nicht selektierten Fenstern
`SystemColor.inactiveCaptionText` | Schriftfarbe für die Titelleiste von nicht selektierten Fenstern
`SystemColor.inactiveCaptionBorder` | Rahmenfarbe für die Titelleiste von nicht selektierten Fenstern
`SystemColor.window` | Hintergrundfarbe für Fenster
`SystemColor.windowBorder` | Farbe für Fensterrahmen
`SystemColor.windowText` | Farbe für Text im Fenster
`SystemColor.menu` | Hintergrundfarbe für Menüs
`SystemColor.menuText` | Textfarbe für Menüs
`SystemColor.text` | Hintergrundfarbe für Textfelder
`SystemColor.textText` | Textfarbe für Textfelder
`SystemColor.textHighlight` | Hintergrundfarbe für hervorgehobenen Text
`SystemColor.textHighlightText` | Textfarbe für hervorgehobenen Text
`SystemColor.textInactiveText` | Textfarbe für inaktiven Text
`SystemColor.control` | Hintergrundfarbe für Dialogelemente
`SystemColor.controlText` | Textfarbe für Dialogelemente
`SystemColor.controlHighlight` | Farbe für hervorgehobene Dialogelemente
`SystemColor.controlLtHighlight` | Helle Farbe für hervorgehobene Dialogelemente
`SystemColor.controlShadow` | Farbe für den Schatten von Dialogelementen
`SystemColor.controlDkShadow` | Dunklere Farbe für den Schatten von Dialogelementen
`SystemColor.scrollbar` | Hintergrundfarbe für Schieberegler
`SystemColor.info` | Hintergrundfarbe für Hilfetext
`SystemColor.infoText` | Textfarbe für Hilfetext

Tabelle 25.2: Liste der vordefinierten Systemfarben

Das folgende Listing zeigt ein einfaches Programm, das den Text »Tag & Nacht« in den Systemfarben für normalen und hervorgehobenen Text ausgibt. Als Fensterhintergrund wird die Systemfarbe `desktop` verwendet. Der Text »Tag« wird mit Hilfe der Systemfarben `textText` und `text` in normaler Textfarbe auf normalem Texthintergrund ausgegeben. Der Text »Nacht« wird dagegen mit den Systemfarben `textHighlight` und `textHighlightText` invertiert dargestellt. Das dazwischenstehende »&« wird in Blau auf normalem Hintergrund ausgegeben.

    001 /* Listing2502.java */
    002
    003 import java.awt.*;
    004 import java.awt.event.*;
    005
    006 public class Listing2502
    007 extends Frame
    008 {
    009   public static void main(String[] args)
    010   {
    011     Listing2502 wnd = new Listing2502();
    012   }
    013
    014   public Listing2502()
    015   {
    016     super("Systemfarben");
    017     setBackground(SystemColor.desktop);
    018     setSize(200,100);
    019     setVisible(true);
    020     addWindowListener(new WindowClosingAdapter(true));
    021   }
    022
    023   public void paint(Graphics g)
    024   {
    025     g.setFont(new Font("Serif",Font.PLAIN,36));
    026     FontMetrics fm = g.getFontMetrics();
    027     int sheight    = fm.getHeight();
    028     int curx       = 10;
    029     int cury       = getInsets().top + 10;
    030     //"Tag" in normaler Textfarbe
    031     int swidth  = fm.stringWidth("Tag");
    032     g.setColor(SystemColor.text);
    033     g.fillRect(curx,cury,swidth,sheight);
    034     g.setColor(SystemColor.textText);
    035     g.drawString("Tag",curx,cury+fm.getAscent());
    036     //"&" in Blau auf normalem Hintergrund
    037     curx += swidth + 5;
    038     swidth = fm.stringWidth("&");
    039     g.setColor(Color.blue);
    040     g.drawString("&",curx,cury+fm.getAscent());
    041     //"Nacht" in hervorgehobener Textfarbe
    042     curx += swidth + 5;
    043     swidth = fm.stringWidth("Nacht");
    044     g.setColor(SystemColor.textHighlight);
    045     g.fillRect(curx,cury,swidth,sheight);
    046     g.setColor(SystemColor.textHighlightText);
    047     g.drawString("Nacht",curx,cury+fm.getAscent());
    048   }
    049 }
| Listing2502.java

Listing 25.2: Verwendung von Systemfarben

Abbildung 25.2 zeigt die Ausgabe des Programms:

Abbildung 25.2: Verwendung von Systemfarben

|  | Ein weiteres Beispiel zur Verwendung der Systemfarben findet sich in Kapitel 32. Das zu dem Dialogelement `ScrollPane` vorgestellte Beispielprogramm zeigt alle Systemfarben zusammen mit ihrem Namen in einem verschiebbaren Fenster an. |  |
Hinweis

Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de