GUI-Design mit der Java-Swing-API: So verwendet man PLAF

Swing enthält mehrere Sets von UI-Delegates. Jedes Set enthält ComponentUI-Implementierungen für die meisten Swing-Komponenten und wird PLAF-Implementierung genannt.

Das Paket javax.swing.plaf besteht aus abstrakten Klassen, die von ComponentUI abgeleitet sind. Die Klassen im Paket javax.swing.plaf.basic erweitern diese abstrakten Klassen, um das Basic-Look-and-Feel zu implementieren. Das ist das Set von UI-Delegates, das alle anderen Look-and-Feel-Klassen als Ausgangspunkt verwenden sollen. Das Basic-Look-and-Feel kann nicht selbständig verwendet werden, da BasicLookAndFeel eine abstrakte Klasse ist. Es gibt drei einsatzfertige Look-and-Feel-Implementierungen, die vom Basic-Look-and-Feel abgeleitet sind:

  • Windows: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
  • CDEMotif: com.sun.java.swing.plaf.motif.MotifLookAndFeel
  • Metal (standardmäßig): javax.swing.plaf.metal.MetalLookAndFeel

Es gibt auch ein MacLookAndFeel zur Simulation einer Macintosh-Benutzeroberfläche. Doch es wird nicht zusammen mit Java 2 geliefert, sondern muss separat heruntergeladen werden. Das Multiplexing-Look-and-Feel (javax.swing.plaf.multi.MultiLookAndFeel) erweitert alle abstrakten Klassen in javax.swing.plaf. Es ist dafür gedacht, Kombinationen von Look-and-Feels simultan zu verwenden, vor allem, aber nicht nur für den Einsatz mit Accessibility-Look-and-Feels. Aufgabe jedes Multiplexing-UI-Delegate ist die Verwaltung all seiner untergeordneten UI-Delegates.

Jedes Look-and-Feel-Paket enthält eine Klasse, die von der abstrakten Klasse javax.swing.LookAndFeel: BasicLookAndFeel, MetalLookAndFeel, WindowsLookAndFeel, und so weiter abgeleitet ist. Das sind die zentralen Punkte für den Zugriff auf jedes Look-and-Feel-Paket. Man verwendet sie, wenn das aktuelle Look-and-Feel geändert werden soll. Die Klasse UI-Manager, die zur Verwaltung installierter Look-and-Feels verwendet wird, benutzt sie zum Zugriff auf die UI-Defaults-Tabelle des aktuellen Look-and-Feel. Diese enthält unter anderem UI-Delegate-Klassennamen für das entsprechende Look-and-Feel jeder Swing-Komponente.

Um das aktuelle Look-and-Feel einer Anwendung zu ändern, kann einfach die Methode setLookAndFeel() des UI-Manager augefrufen werden, um ihr den vollständig qualifizierten Namen des zu verwendenden LookAndFeel zu übergeben. Zur Laufzeit wird dies mit dem Code aus Listing A erreicht.

Listing A

SwingUtilities.updateComponentTreeUI() informiert alle abhängigen Elemente der angegebenen Komponente, dass sich das Look-and-Feel geändert hat und dass sie ihren UI-Delegate gegen einen anderen des angegebenen Typs austauschen müssen.

Ein PLAF erstellen

Wer selber ein PLAF erstellt, muss sich entscheiden, welche von zwei Designmethoden für das Erstellen eines Look-and-Feel in Java verwendet werden sollen. Eine Methode besteht darin, das Paket javax.swing.plaf zu erweitern. Bei der anderen Methode erweitert man ein vorhandenes Look-and-Feel-Paket, normalerweise javax.swing.plaf.basic.

Es empfiehlt sich nicht, ein Look-and-Feel aus dem Paket javax.swing.plaf zu erweitern, wenn das Look-and-Feel für einen PC gedacht ist. Denn das Paket javax.swing.plaf.basic erweitert bereits fast alle Komponenten des javax.swing.plaf-Pakets, so dass diese unmittelbar einzusetzen sind. Damit braucht der Programmierer nur zu entscheiden, welche Aspekte am Look-and-Feel geändert werden sollen, und die entsprechende Komponente auswählen. Auf diese Weise muss man nicht alles selber erweitern und implementieren.

Bei der Implementierung des Pakets javax.swing.plaf kommt ein grundlegendes Prinzip zum Tragen, das die einfache Anpassung eines Look-and-Feel ermöglicht. Dieses Prinzip ist die zentrale Zusammenfassung von Komponenten, Farbe und UI-Klassen in der Klasse LookAndFeel.

Das Paket javax.swing.plaf.basic zeichnet die leichtgewichtigen Swing-Komponenten wie erwartet. Die Empfehlung ändert sich allerdings, wenn man ein Look-and-Feel für ein anderes Gerät als einen PC erstellt. Dann ist die bevorzugte Methode eine umfassende Erweiterung des javax.swing.plaf-Pakets.

Page: 1 2

ZDNet.de Redaktion

Recent Posts

Netzwerk-Portfolio für das KI-Zeitalter

Huawei stellt auf der Connect Europe 2024 in Paris mit Xinghe Intelligent Network eine erweiterte…

1 Tag ago

Internet-Tempo in Deutschland: Viel Luft nach oben

Höchste Zeit für eine schnelle Kupfer-Glas-Migration. Bis 2030 soll in Deutschland Glasfaser flächendeckend ausgerollt sein.

1 Tag ago

Erste Entwickler-Preview von Android 16 verfügbar

Schon im April 2025 soll Android 16 den Status Plattformstabilität erreichen. Entwicklern gibt Google danach…

1 Tag ago

Kaspersky warnt vor Cyberangriff auf PyPI-Lieferkette

Die Hintermänner setzen KI-Chatbot-Tools als Köder ein. Opfer fangen sich den Infostealer JarkaStealer ein.

2 Tagen ago

Digitale Produkte „cyberfit“ machen

Vernetzte Produkte müssen laut Cyber Resilience Act über Möglichkeiten zur Datenverschlüsselung und Zugangsverwaltung verfügen.

2 Tagen ago

Google schließt schwerwiegende Sicherheitslücken in Chrome 131

Das jüngste Update für Windows, macOS und Linux stopft drei Löcher. Eine Anfälligkeit setzt Nutzer…

2 Tagen ago