Guido Krüger - JAVA 1.1 lernen - Kapitel 16

Previous Page Previous Page TOC TOC Index Next Page Previous Page



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

Beispiel

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.

import java.awt.*;
import java.awt.event.*;

public class Example1602
extends Frame
{
   public static void main(String[] args)
   {
      Example1602 wnd = new Example1602();
   }

   public Example1602()
   {
      super("Example1602");
      setBackground(SystemColor.desktop);
      setSize(200,100);
      setVisible(true);
      //WindowListener
      addWindowListener(
         new WindowAdapter() {
            public void windowClosing(WindowEvent event)
            {
               System.exit(0);
            }
         }
      );
   }

   public void paint(Graphics g)
   {
      g.setFont(new Font("Serif",Font.PLAIN,36));
      FontMetrics fm = g.getFontMetrics();
      int sheight    = fm.getHeight();
      int curx       = 10;
      int cury       = getInsets().top + 10;
      //"Tag" in normaler Textfarbe
      int swidth  = fm.stringWidth("Tag");
      g.setColor(SystemColor.text);
      g.fillRect(curx,cury,swidth,sheight);
      g.setColor(SystemColor.textText);
      g.drawString("Tag",curx,cury+fm.getAscent());
      //"&" in blau auf normalem Hintergrund
      curx += swidth + 5;
      swidth = fm.stringWidth("&");
      g.setColor(Color.blue);
      g.drawString("&",curx,cury+fm.getAscent());
      //"Nacht" in hervorgehobener Textfarbe
      curx += swidth + 5;
      swidth = fm.stringWidth("Nacht");
      g.setColor(SystemColor.textHighlight);
      g.fillRect(curx,cury,swidth,sheight);
      g.setColor(SystemColor.textHighlightText);
      g.drawString("Nacht",curx,cury+fm.getAscent());
   }
}

Abbildung 16.2 zeigt die Ausgabe des Programms:

Undisplayed Graphic

Abbildung 16.2: Verwendung von Systemfarben

Hinweis

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.


Previous Page Previous Page Page Top TOC Index Next Page Previous Page

(C) 1997 Guido Krueger, "Java 1.1 lernen", Addison-Wesley, Bonn, 1997