JTree ‚Updaten‘ - auch gerne dynamisch…
ich versuch einen Verzeichnissbaum per JTree darzustellen. Da
das Verzeichnis aber nicht auf dem ausführenden Rechner liegt,
sondern auf einem Sever (der sehr langsam ist) kann ich nicht
die ganze Struktur „sofort“ rüberladen.
Hallo,
zufällig hat mir gerade jemand eine sehr ähnliche Frage gestellt.
Zwar auf einem etwas niedrigeren Niveau, aber egal.
Ich habe darauf das hier geantwortet, könnte dich ja vielleicht
auch interessieren:
> ich möchte mit Java in einem Programmfenster den Inhalt eines
> Laufwerks als Verzeichnisbaum darstellen, bin aber leider noch
> nicht so Firm in den verschiedenen Java-Klassen.
> Vielleicht kannst Du eine Empfehlung aussprechen was man dabei
> berücksichtigen sollte?
[Hier waren ein paar Erklärungen zum Thema Verzeichniszugriff]
Danach schaust du dir die Klasse javax.swing.JTree und das
zugehörige Packet javax.swing.tree.* an. Darin findest du dann
die Klassen, die dir erlauben, die erhaltenen Informationen als
TreeModel darzustellen. Wenn du erstmal ein solches implementiert
hast (dürfte für den Fall von Verzeichnissen nicht sehr schwer
sein), dann kannst du das in deinen JTree reintun und - voilà -
es wird angezeigt…
Das Hauptteil ist also, das Model zu schreiben, der Rest geht
dann von alleine (ist bei Swing eigentlich fast immer so).
Idee: Pro Verzeichnis einen Knoten, der jeweils seinen eigenen
Verzeichnispfad kennt und bei Abfrage seiner Kinder mal schnell
im Verzeichnis nachschaut und eine neue Kinderliste mit
Verzeichnis-Knoten und Datei-Blättern (also kinderlose Knoten,
bei denen isLeaf() „true“ liefert) zurückgibt. So bleibt das
ganze auch noch dynamisch und passt sich Änderungen im
Dateisystem durch Neuabfrage bei jedem Zugriff automatisch an.
Also im Wesentlichen ging es einfach darum, ein eigenes Modell zu
schreiben, das dann dynamisch auf die Verzeichnisse zugreift. So
bekommst du jede Änderung automatisch beim Zugriff mit…
Der Vorteil von Swing ist ja gerade die Unabhängigkeit der
Anzeige von den Daten. Du schreibst nur Modelle und die Anzeige
ist dann vorimplementiert…
Gruß,
Stefan 