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
Neueste Kommentare
Noch keine Kommentare zu Swing-Bäume leicht gemacht
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.