Swing-Bäume leicht gemacht

Wie konnte hier der Zen-Ansatz helfen? In diesem Zusammenhang soll als Erstes das DefaultTreeModel näher untersucht werden. Das DefaultTreeModel dient derzeit zur Verwaltung der Ereignisse bei der Aktualisierung des Jtree. Das DefaultTreeModel ist eine Implementierung der TreeModel-Schnittstelle. Wer schon einmal mit der Tabellen-Komponente Jtable gearbeitet hat, weiß, dass diese ein DefaultTableModel enthält, welches das AbstractTableModel erweitert, das wiederum die TableModel-Schnittstelle implementiert. Das AbstractTableModel enthält alle Methoden, die zur Benachrichtigung einer Jtable bezüglich dynamischer Änderungen in der Tabelle erforderlich sind, wobei das DefaultTableModel diese Methoden verwendet. Wer sein eigenes TableModel schreibt, muss also das AbstractTableModel erweitern. Wendet man nun diese Logik auf den Baum an, gilt es, ein AbstractTreeModel zu ergänzen.

Das Problem dabei ist, dass es in Swing kein AbstractTreeModel gibt. Die einzige Definition für das Generieren von TreeModelEvents und ihren Versand an den Baum ist im DefaultTreeModel verkapselt. Obwohl es hierfür keinen konkreten Grund gibt, erschwert dieser Umstand das Erstellen eines neuen Modells doch erheblich. Aber es gibt bereits bestehende Implementierungen, die dieses Problem aufgreifen: Hier wird die allgemein zugängliche Version von Christian Kaufhold verwendet, die das Auslösen der Ereignisse mit praktischen Zusatzfunktionen implementiert.

Jetzt gilt es genauer zu untersuchen, was in Hinblick auf das TreeModel im Einzelnen implementiert werden muss. Die Jtree-Komponente verwendet ein Root-„Objekt“ zur Verankerung in dem Modell, das sie mit getRoot findet. Anschließend navigiert sie mithilfe von nur vier Methoden – getChild(), getChildCount(), getIndexOfChild() und isLeaf() – durch den Baum.

Jeder dieser Aufrufe verwendet Objekt-Klassen als Parameter und gibt Werte aus, die auf die Knoten des Baums verweisen. Dies ist ein ganz wichtiger Punkt: Auch wenn man vielleicht erwarten könnte, dass der Baum eine Implementierung der TreeNode-Schnittstelle durch die Konten-Objekte verlangt: dem ist nicht so. Sie können beim Schreiben eines eigenen TreeModel jedes beliebige Objekt benutzen, da die Schnittstelle nicht erkennt, welche Informationen ein Knoten über sich selbst bereitstellen muss.

An dieser Stelle ein Beispielcode: Link zur Zip-Datei

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Adobe schließt neun kritische Lücken in Reader und Acrobat

Das jüngste Update bringt insgesamt zwölf Fixes. Schadcode lässt sich unter Umständen ohne Interaktion mit…

3 Tagen ago

Fabrikautomatisierung: Siemens integriert SPS-Ebene

Eine softwarebasierte Workstation soll es Ingenieuren erlauben, sämtliche Steuerungen zentral zu verwalten. Pilotkunde ist Ford.

3 Tagen ago

Ebury-Botnet infiziert 400.000 Linux-Server weltweit

Kryptodiebstahl und finanzieller Gewinn sind laut ESET-Forschungsbericht die vorrangigen neuen Ziele.

4 Tagen ago

Sicherheitslücken in Überwachungskameras und Video-Babyphones

Schwachstellen aus der ThroughTek Kaylay-IoT-Plattform. Dringend Update-Status der IoT-Geräte prüfen.

4 Tagen ago

AWS investiert Milliarden in Cloud-Standort Brandenburg

Fast acht Milliarden Euro fließen in die deutsche Region der AWS European Sovereign Cloud. Das…

4 Tagen ago

DSL oder Kabel – Welcher Anschluss passt zu Ihnen?

Internet in den eigenen vier Wänden ist heutzutage nicht mehr wegzudenken. Denn egal, ob Homeoffice…

4 Tagen ago