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ß
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ß