15.22 Flexibles Java-Look & Feel 

Das Aussehen der Komponenten lässt sich frei bestimmen und erzeugt so bei jedem Benutzer auf seiner Architektur die Illusion, es wäre eine plattformabhängige Applikation. Das Programm gliedert sich hinsichtlich des Aussehens in die anderen Programme ein und fällt nicht als Fremdling auf. Standardmäßig begegnet uns das Look & Feel (L&F) mit dem Namen »Ocean« (früher war es »Metal«).
Um das Aussehen von Java-Applikationen zu ändern, gibt es eine Reihe von Möglichkeiten:
- Beim Programmstart einen Schalter setzen.
- Eine Konfigurationsdatei in das lib-Verzeichnis setzen.
- Im Java-Programm von Hand das L&F verändern.
15.22.1 L & F global setzen 

Um für alle Java-Programme zentral ein L & F zu setzen, wird in das C:\Programme\Java\ jdk1.6.0\jre\lib-Verzeichnis eine kleine Datei swing.properties gesetzt:
Listing 15.68 swing.properties
swing.defaultlaf=com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Der Schalter swing.defaultlaf bestimmt die Klasse für das L & F; in unserem Fall Windows. Automatisch nehmen alle gestarteten Java-Programme dieses Standard-L & F an – es sei denn, sie setzen es wieder im Programm um. Das zeigen die folgenden Abschnitte.
15.22.2 UIManager 

Das L & F von Applikationen lässt sich zur Laufzeit ändern. Dazu müssen wir nur eine statische Methode der Klasse UIManager aufrufen, die sich um das Aussehen der Programme kümmert. Hier ist es die spezielle Methode setLookAndFeel(), die als Argument einen Klassennamen erwartet. Verschiedene Methoden sind deklariert, mit denen wir das Java-eigene L & F und das System-L & F einstellen können. Da Benutzer von Java-Programmen im Allgemeinen eine Systemoberfläche erwarten, sollten wir das Java-L & F nach dem Erzeugen des Fensters umschalten.
public class javax.swing.UIManager implements Serializable |
- static LookAndFeel getLookAndFeel() Gibt das aktuelle L & F zurück.
- static String getSystemLookAndFeelClassName() Gibt das L & F des aktuellen Fenstersystems zurück.
- static String getCrossPlatformLookAndFeelClassName() Liefert den Namen der Klassen für das systemunabhängige L & F.
- static void setLookAndFeel( String className ) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException Setzt ein neues L & F.
Listing 15.69 com/tutego/insel/ui/swing/SetLookAndFeel.java, Ausschnit try { UIManager.setLookAndFeel( UIManager.getSystemLookAndFeelClassName() ); } catch( Exception e ) { e.printStackTrace(); } |
Einige spezielle L & F sind nicht auf jeder Architektur erlaubt. So verbietet Apple sein eigenes L & F auf Plattformen anderer Hersteller. [Apple betrachtete die Windows-Version 2.1 als Look-And-Feel-Clone und verklagte Microsoft ab 1988 wegen Urheberrechtsverletzungen auf eine Summe von über fünf Milliarden US-Dollar. Letztendlich bekam Apple aber nichts; das Verfahren wurde 1997 eingestellt. 1989 klagte Xerox gegen Apple und beanspruchte das Urheberrecht an grafischen Oberflächen für sich. ] Dennoch lässt sich das Aqua-L & F installieren, in den Pfad integrieren und dann als com.apple.mrj.swing.MacLookAndFeel einbinden. Weitere Infos dazu bietet die Webseite http://www.ing.unitn.it/~luttero/javaonMac/.
Ändern des Aussehens zur Laufzeit
Das Setzen eines L & Fs mit setLookAndFeel() führt zu keinem Neuzeichnen der Komponenten. Wird das neue L & F gesetzt, bevor Swing die Komponenten darstellen muss, fällt das nicht auf. Mit dargestellten Komponenten müssen wir jedoch das Neuzeichnen anstoßen. Dazu dient die Methode:
SwingUtilities.updateComponentTreeUI( component );
Die component wird im Allgemeinen das Window (also JFrame/JWindow) sein.
15.22.3 Verbessern des Aussehens unter Windows mit JGoodies Looks 

Zwar bemühte sich Sun bis Java 6 bestmöglich das Windows XP-Look & Feel zu emulieren, doch an allen Stellen gelingt das nicht. Seit Java 6 nutzt das System den nativen Windows-Renderer, so dass Unstimmigkeiten eigentlich ausgeschlossen sein sollten. Verbesserungen lassen sich auch nicht so einfach publizieren, da Sun an Release-Zyklen gebunden ist. In diesem Fall hilft JGoodies Looks (https://looks.dev.java.net/), ein Look and Feel unter der BSD-Lizenz. Das Ziel von Looks ist die perfekte Nachbildung des Aussehens für die Windows-Reihen 95/98/NT/ME/2000/2003/XP/Vista ab Java 1.4. Gegenüber dem Windows Look and Feel von Sun korrigiert es viele Feinheiten, wie passende Insets bei Eingabefeldern, Icons, Farben, Rahmen, den richtigen Font, Menüeigenschaften, Auflösungen von 96 und 120 dpi und vieles mehr.
Gesetzt wird Looks wie jedes andere Look & Feel:
try { String laf = LookUtils.IS_OS_WINDOWS_XP ? Options.getCrossPlatformLookAndFeelClassName() : Options.getSystemLookAndFeelClassName(); UIManager.setLookAndFeel( laf ); } catch ( Exception e ) { System.err.println( "Can't set look & feel:" + e ); }