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

Swing verpackt View und Controller jeder Komponente in ein Objekt namens UI-Delegate. Aus diesem Grund wird die Swing zugrunde liegende Architektur als Model-Delegate statt als Model-View-Controller bezeichnet. Idealerweise erfolgt jegliche Kommunikation zwischen dem Modell und dem UI-Delegate auf indirekte Weise, so dass mehr als ein Modell mit einem UI-Delegate verknüpft werden kann und umgekehrt.

UI-Delegates

Jedes UI-Delegate ist von einer abstrakten Klasse namens ComponentUI abgeleitet. ComponentUI-Methoden beschreiben die grundlegende Art und Weise, wie ein UI-Delegate und eine Komponente, die dieses benutzt, miteinander kommunizieren. Man beachte, dass jede Methode eine JComponent als Parameter erwartet. Die wichtigsten ComponentUI-Methoden sind hier aufgelistet:

  • static ComponentUI createUI(JComponent c): Diese Methode wird normalerweise so implementiert, dass sie eine gemeinsame Instanz des UI-Delegate zurückgibt, das von der definierenden Unterklasse ComponentUI selber definiert wird. Diese Instanz wird für den Austausch unter Komponenten desselben Typs verwendet. Ein Beispiel: Alle JButtons, die das Metal-Look-and-Feel verwenden, teilen dieselbe statische UI-Delegate-Instanz, die standardmäßig in javax.swing.plaf.metal.MetalButtonUI definiert ist.
  • installUI(JComponent c): Diese Methode installiert die ComponentUI auf der angegebenen Komponente. Dadurch werden der Komponente und/oder ihrem Modell normalerweise Listener hinzugefügt, die das UI-Delegate benachrichtigen, wenn sich Statusänderungen ergeben, die eine Aktualisierung der Ansicht (View) erforderlich machen.
  • update(Graphics g, JComponent c): Falls die Komponente undurchsichtig ist, zeichnet diese Methode den Hintergrund und ruft dann paint(Graphics g, JComponent c) auf.
  • paint(Graphics g, JComponent c): Diese Methode erhält alle benötigten Informationen von der Komponente und eventuellen Modellen, um sie korrekt darzustellen.

Um die Verwendung eines bestimmten UI-Delegate zu erzwingen, kann man die Methode setUI() einer Komponente wie folgt aufrufen:

Die Klasse JComponent definiert Methoden zum Zuordnen von UI-Delegates, weil die erforderlichen Methodendeklarationen keinen komponentenspezifischen Code enthalten. Allerdings ist dies bei Datenmodellen nicht möglich. Hier gibt es nämlich kein grundlegendes Interface, das für alle Modelle gilt. Das heißt, es gibt keine Basisklasse wie ComponentUI für Swing-Modelle. Aus diesem Grund werden die Methoden zum Zuordnen von Modellen bei Bedarf in Unterklassen von JComponent definiert.

Page: 1 2

ZDNet.de Redaktion

Recent Posts

Erreichbarkeit im Weihnachtsurlaub weiterhin hoch

Nur rund die Hälfte schaltet während der Feiertage komplett vom Job ab. Die anderen sind…

12 Stunden ago

Hacker missbrauchen Google Calendar zum Angriff auf Postfächer

Security-Experten von Check Point sind einer neuen Angriffsart auf die Spur gekommen, die E-Mail-Schutzmaßnahmen umgehen…

2 Tagen ago

Bedrohungen in Europa: Schwachstellen in der Lieferkette dominieren

Hinter 84 Prozent der Zwischenfälle bei Herstellern stecken Schwachstellen in der Lieferkette. Auf dem Vormarsch…

2 Tagen ago

Bericht: Apple arbeitet an faltbarem iPad

Es kommt angeblich 2028 auf den Markt. Das aufgeklappte Gerät soll die Displayfläche von zwei…

2 Tagen ago

HPE baut Supercomputer am Leibniz-Rechenzentrum

Das System basiert auf Hardware von HPE-Cray und Nvidia. Die Inbetriebnahme erfolgt 2027.

3 Tagen ago

Bund meldet Fortschritte in der Netzversorgung

Die Bundesnetzagentur hat ihr Gigabit-Grundbuch aktualisiert. Drei von vier Haushalten sollen jetzt Zugang zu Breitbandanschlüssen…

3 Tagen ago