Swing Datenmodell in Tree spiegeln ohne Adapterklassen

F

Firephoenix

Gast
Das ist was für die JTree-Experten (zu denen ich sicherlich nicht gehöre).

Folgendes Problem habe ich aktuell:
Ich habe ein Datenmodell aus mehreren abhängigen Klassen, dieses Datenmodell kann sich automatisch ändern, oder durch den Benutzer verändert werden.
Beispiele für Änderungen (nicht mein Datenmodell, aber der Vergleich ist brauchbar):
-Ein Schüler wird manuell einer oder mehreren Klausuren zugeordnet und soll nun dort angezeigt werden.
-Ein Schüler schreibt eine Klausur, das Ergebnis wird im Baum angezeigt.

Die Daten sollen in einem (oder mehreren) Baumstrukturen angezeigt werden, denkbar wäre z.B. (um mal bei dem vorigen Beispiel zu bleiben)
-Schüler
--Klausur
---Ergebnis

-Klausur
--Schüler
---Ergebnis

usw.


Da das Datenmodell schon besteht und Adapterklassen unter anderem auch teuer sind (und schwer zu managen, ein Schüler kann z.B. mehreren Klausuren zugeordnet werden) hat sich die Lösung angeboten, ein eigenes TreeModel zu implementieren um direkt die Daten anzuzeigen.
Das Datenmodell bietet alle Abfragemöglichkeiten (Wer hat welche Kinder, ...) die ein Tree interpretieren kann. Weiterhin kann es bei Änderungen per Observer-Pattern überwacht werden.

Und genau da beißt sich die Katze in den Schwanz: Angenommen ich entferne eine Klausur, dann bekomme ich ein Event mit der Klausur zurück und weiß diese ist entfernt.
Jetzt müsste ich aber auch den Tree aktualisieren, ein TreeEvent kann ich nicht zusammenbauen, denn für den TreePath müsste ich ja das Objekt in meinem Datenmodell suchen, dort ist es aber bereits entfernt. Ich könnte also höchstens die Wurzel updaten, dann klappt mir natürlich der ganze Baum zu.

Wäre es eine Alternative mit dem Baum das Datenmodell zu pollen und ihn einfach regelmäßig neu zu zeichnen (geht das überhaupt?). Durch das Renderverfahren im JTree ist neu-zeichnen ja relativ günstig, die Abfragen im Datenmodell sind auch sehr performant.
Ich habe da an sowas gedacht wie einen seperaten Thread, der den Tree einfach alle 50-100ms neu zeichnen lässt.

Hat jemand schonmal sowas versucht, oder gibt es für das Problem eine bekannte, elegantere Lösung die ich übersehen habe?

Gruß
 
S

SlaterB

Gast
> Angenommen ich entferne eine Klausur, dann bekomme ich ein Event mit der Klausur zurück und weiß diese ist entfernt.

was genau steht an Information in dem Event? die Klausur? hat die einen Link auf den Schüler oder so?
eine gewisse Informationsdichte wäre schon nützlich, was soll sonst jedermann mit diesem Event anfangen


----

eine Überlegung wäre auch, sich im Model zu merken, welche Daten zur Anzeige verarbeitet wurden,
im Löschfall mit dem neuen Ist-Zustand vergleichen und so das fehlende Element zu finden,

kann allerdings vielleicht sehr viele Daten betreffen, wenn viel aufgeklappt ist und der JTree scrollt ohne dass im DatenModel
immer neu abgefragt wird was gerade in der GUI zu sehen ist
 
Zuletzt bearbeitet von einem Moderator:
F

Firephoenix

Gast
Bei dem Event bekomme ich tatsächlich nur das gelöschte Objekt zurück (z.B. für andere Observer um gelöschte Objekte irgendwo zu archivieren), die Datenstruktur ist allerdings zu dem Zeitpunkt schon auf dem aktuellen Stand, ich habe also keine Möglichkeit mehr nachträglich herauszufinden welche Objekte das gelöschte Objekt referenzierten.

Eine Möglichkeit wäre vielleicht auch eine Änderung am Eventsystem, so dass ich mir zusätzlich zu dem Objekt Listen zurückgeben lasse von allen Objekten, die auf dieses Referenziert haben (wären 2-3 Listen im aktuellen Datenmodell), diese dann im Baum suche und dort gezielt update.

Gruß
 

bERt0r

Top Contributor
In deinem JTree wird die Node des Objekts aber noch angezeigt oder? Kannst du nicht einfach alle Nodes durchlaufen und deren UserObject mit deinem Objekt vergleichen?
 
F

Firephoenix

Gast
In deinem JTree wird die Node des Objekts aber noch angezeigt oder? Kannst du nicht einfach alle Nodes durchlaufen und deren UserObject mit deinem Objekt vergleichen?

Das entspricht der Lösung die ich eigentlich vermeiden wollte, da ich das bestehende Datenmodell eigentlich nicht nochmal in TreeNodes packen wollte, sondern es direkt mit einem TreeModel darstellen will.
Die Alternative werde ich aber auf alle Fälle auch mal testen, vom Aufwand her scheint es einer der leichteren Ansätze zu sein.

Gruß
 

bERt0r

Top Contributor
Ja klar, eigentlich ist es schöner wenn das Model direkt auf die echten Daten zugreift. In der Realität hat man dann immer wieder mit solchen Problemen wie du zu tun. Das is z.B auch ein Grund warum man normalerweise ein Tablemodel nicht direkt die DB-Abfragen/Änderungen machen lässt sondern das ganze quasi als Puffer nutzt.
Ansonsten, kannst du dir nicht auch einfach den TreePath merken, deinen Tree neu aufbauen und dann den Treepath expanden?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P JavaFX Änderungen am Datenmodell visuell nicht sichtbar AWT, Swing, JavaFX & SWT 3
K SWT Table Modell / Datenmodell AWT, Swing, JavaFX & SWT 14
F JavaFX (Tree)TableView korrekt drucken AWT, Swing, JavaFX & SWT 1
4a61766120617274697374 dynamische Tree View AWT, Swing, JavaFX & SWT 2
I JavaFX BorderPane ins Tree einfügen AWT, Swing, JavaFX & SWT 11
T SWT Warum ist mein 1.Tree Node selektiert? AWT, Swing, JavaFX & SWT 11
O Tree path expandieren AWT, Swing, JavaFX & SWT 2
Madlip SWT Tree mit einen Klick alles ausklappen AWT, Swing, JavaFX & SWT 3
J Knotenselect von bestimmten Knoten im Tree AWT, Swing, JavaFX & SWT 2
L SWT tree elemente markieren AWT, Swing, JavaFX & SWT 4
J SWT JFace Tree in Section unsichtbar (Eclipse Forms) AWT, Swing, JavaFX & SWT 5
L SWT Tree reagieren BEVOR selektiert wurde AWT, Swing, JavaFX & SWT 2
S SWT tree collapse AWT, Swing, JavaFX & SWT 4
W SWT Resize Tree-Element AWT, Swing, JavaFX & SWT 3
S Dropdown menu / tree AWT, Swing, JavaFX & SWT 7
P SWT Tree - Keine Selection zulassen AWT, Swing, JavaFX & SWT 4
G Swing Tree wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
B SWT SWT Tree mit mehreren Spalten AWT, Swing, JavaFX & SWT 3
A Swing JTree Tree Node löschen AWT, Swing, JavaFX & SWT 2
K SWT und Tree, wie kann ich TreeItem aus einem Tree entfernen? AWT, Swing, JavaFX & SWT 12
G SWT Tree AWT, Swing, JavaFX & SWT 4
S Tree - ArrayList Zuordnung! AWT, Swing, JavaFX & SWT 13
G Bezeichungen im Tree werden durch . gekürzt? AWT, Swing, JavaFX & SWT 5
G Drag And Drop von Component (List, Tree) zum Desktop AWT, Swing, JavaFX & SWT 2
T TREE AWT, Swing, JavaFX & SWT 3
T Tree AWT, Swing, JavaFX & SWT 2
G tree.setSize tut nicht AWT, Swing, JavaFX & SWT 5
S SWT Tree AWT, Swing, JavaFX & SWT 3
U Baum/Tree nach Benutzer anzeigen AWT, Swing, JavaFX & SWT 3
L Renderer mit nativen komponenten in tabelle / tree / list AWT, Swing, JavaFX & SWT 4
R Tree automatisch öffnen AWT, Swing, JavaFX & SWT 7
N Tree automatisch öffnen AWT, Swing, JavaFX & SWT 2
J [SWT] alle Zellen in einem Tree einzeln selektieren AWT, Swing, JavaFX & SWT 2
S TableTree - Tree nicht in erster Spalte AWT, Swing, JavaFX & SWT 5
R Tree-Struktur in einer DB abspeichern AWT, Swing, JavaFX & SWT 15
R Klick in einem Tree erkennen und auswerten AWT, Swing, JavaFX & SWT 6
F Ermittlung der X- und Y- Koordinaten im Tree bei Tastaturst. AWT, Swing, JavaFX & SWT 5
S [S] custom tree componente AWT, Swing, JavaFX & SWT 8
C tree action AWT, Swing, JavaFX & SWT 8
G Tree und expand eines bekannten Pfades AWT, Swing, JavaFX & SWT 5
F Tree-Knoten programmgesteuert auswählen AWT, Swing, JavaFX & SWT 3
J Tree nur mit Ordner anzeigen? AWT, Swing, JavaFX & SWT 4
W SWT - Tree: Problem mit Double-Click expand AWT, Swing, JavaFX & SWT 5
R Nur Verzeichnisse im Tree? AWT, Swing, JavaFX & SWT 5
G verzeichnis tree erstellen AWT, Swing, JavaFX & SWT 2
V Tree Ausgabe Problem AWT, Swing, JavaFX & SWT 2
B Bild bearbeiten mit Transparenz (spiegeln, Farben austauschen) AWT, Swing, JavaFX & SWT 8
C string spiegeln AWT, Swing, JavaFX & SWT 14
Z JPanels spiegeln und JLabel Background-color AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben