Swing-Bäume leicht gemacht

Nun stehen also der Pfad zu dem Elternelement, die Position, in der das Kind hinzugefügt wurde sowie die ID der hinzugefügten Mitteilung zur Verfügung. Man kann jetzt eine der Methoden des AbstractTreeModel, fireChildAdded, aufrufen, die die geeigneten TreeModelEvents auslöst. Wenn man fireChildAdded ganz einfach und direkt aufruft, dann kann es allerdings vorkommen, dass Änderungen nur an dem Baum und nicht im Swing-Ereignis-Thread ausgeführt werden, was zu einer Beschädigung des UI führen kann. Besser ist es daher, den Aufruf SwingUtilities.invokeLater() zu benutzen, der ein Runnable-Objekt zu der auszuführenden Reihe von Swing-Ereignissen hinzufügt. Man sollte nicht versuchen, den TreePath und die Index-Informationen in diesem Runnable zu evaluieren – dies kann noch zu einem späteren Zeitpunkt erfolgen, wobei es angesichts der sich rasch verändernden Datenquelle eventuell ohnehin nicht möglich ist, die Pfad-Informationen zu erhalten. Ein ähnlicher Ansatz wird in der Methode deleteMessage angewandt, obgleich hierfür der Index-Wert und die Elternelement-ID bekannt sein müssen, da die Mitteilung nicht mehr die Datenquelle darstellt. Bei deleteMessage ruft man im Allgemeinen fireChildRemoved auf.

Nachdem diese Methoden implementiert wurden, liegt nun ein dynamisches Baummodell vor, mit dem man experimentieren kann. MessagesFrame enthält ein einfaches UI, das zunächst eine MessageBox und anschließend einen Jtree mithilfe des MessageTreeBoxModel erstellt. Nun folgt der letzte Teil des Zen. Sie müssen einen Cellrenderer für den Baum installieren, der die Long-ID-Werte handhaben kann. In diesem Fall legt die Klasse MessageRenderer den Text für einen direkt von der MessageBox empfangenen String fest.

Beim Ausführen des Beispielcodes entsteht ein schneller und reaktionsfähiger Baum, der große Updates durchführen und zahlreiche Knoten handhaben kann, ohne dass die Schnittstelle beeinträchtigt wird. Einzig die Schaltfläche ExpandAll dauert etwas länger, da der Baum einige Zeit braucht, um die Höhe und Weite des komplett erweiterten Baums zu berechnen. Man kann diesen Vorgang ein wenig beschleunigen, indem man die Methode setRowHeight() von Jtree benutzt, um die Höhe festzusetzen, und setLargeModel(true) im Baum einsetzt, so dass dieser für seine Größenberechnungen weniger Cache belegt. So kann man auch erheblich größere Bäume beschleunigen, obgleich man bei Baumelementen variabler Höhe an Flexibilität einbüßt.

Der Quellcode für dieses Tutorial steht als Zip-Datei zum Download zur Verfügung.

Page: 1 2 3 4

ZDNet.de Redaktion

Recent Posts

Microsoft steigert Umsatz und Gewinn im dritten Fiskalquartal

Aus 61,9 Milliarden Dollar generiert das Unternehmen einen Nettoprofit von 21,9 Milliarden Dollar. Das größte…

1 Woche ago

Digitalisierung! Aber wie?

Mehr Digitalisierung wird von den Unternehmen gefordert. Für KMU ist die Umsetzung jedoch nicht trivial,…

1 Woche ago

Meta meldet Gewinnsprung im ersten Quartal

Der Nettoprofi wächst um 117 Prozent. Auch beim Umsatz erzielt die Facebook-Mutter ein deutliches Plus.…

2 Wochen ago

Maximieren Sie Kundenzufriedenheit mit strategischem, kundenorientiertem Marketing

Vom Standpunkt eines Verbrauchers aus betrachtet, stellt sich die Frage: Wie relevant und persönlich sind…

2 Wochen ago

Chatbot-Dienst checkt Nachrichteninhalte aus WhatsApp-Quellen

Scamio analysiert und bewertet die Gefahren und gibt Anwendern Ratschläge für den Umgang mit einer…

2 Wochen ago

Microsoft stellt kleines KI-Modell Phi-3 Mini vor

Seine Trainingsdaten umfassen 3,8 Milliarden Parameter. Laut Microsoft bietet es eine ähnliche Leistung wie OpenAIs…

2 Wochen ago