Titel | Inhalt | Suchen | Index | API | Go To Java 2, Zweite Auflage, Handbuch der Java-Programmierung |
<< | < | > | >> | Kapitel 25 - Farben |
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 dazwischen stehende »&« 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 |
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. |
|
Titel | Inhalt | Suchen | Index | API | Go To Java 2, Zweite Auflage, Addison Wesley, Version 2.0 |
<< | < | > | >> | © 2000 Guido Krüger, http://www.gkrueger.com |