Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 

16.4 Systemfarben



Um ihren Anwendungen ein einheitliches Look & 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 16.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 16.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 dazwischen stehende »&« wird in Blau auf normalem Hintergrund ausgegeben.

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

 Beispiel 

Abbildung 16.2 zeigt die Ausgabe des Programms:

Abbildung 16.2: Verwendung von Systemfarben

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

 Hinweis 


 Tit   Inh   Ind   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   <<   <   >   >> 
Go To Java 2, Addison Wesley, Version 1.0.2, © 1999 Guido Krüger, http://www.gkrueger.com