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

CopyRhadamantys greift weltweit Unternehmen an

Ausgeklügelte Phishing-Kampagne verwendet eine weiterentwickelte Version der Rhadamanthys-Stealer-Malware.

2 Tagen ago

Facebook Marketplace: EU verhängt Geldbuße von fast 800 Millionen Euro gegen Meta

Die EU-Kommission kritisiert die Verknüpfung von Facebook und dem hauseigenen Online-Kleinanzeigendienst. Sie sieht darin einen…

3 Tagen ago

Umfrage: Angestellte in Deutschland unterschätzen NIS-2-Richtlinie

Fast zwei Drittel halten jedoch eine Umsetzung aller Vorgaben von NIS 2 bis Jahresende für…

3 Tagen ago

Kostenloser Dekryptor für ShrinkLocker

Mit dem Dekryptor von Bitdefender können Opfer von Attacken mit der Shrinklocker-Ransomware Dateien wiederherstellen.

3 Tagen ago

Malwarebytes warnt vor Betrugsmaschen beim Weihnachtseinkauf

In der Vorweihnachtszeit ist vor allem Malvertising auf dem Vormarsch. Cyberkriminelle locken Nutzer über schädliche…

3 Tagen ago

Bedrohungsindex: Deutliche Zunahme von Infostealern im Oktober

Dazu trägt unter der Infostealer Lumma-Stealer bei. Hierzulande dominiert der Infostealer Formbook die Malware-Landschaft.

4 Tagen ago