JTree aktualisieren

Status
Nicht offen für weitere Antworten.

sharpshooter

Mitglied
Hallo,

ich habe einen JTree, der beim Starten mit einer Liste aus einer DB gefüllt wird. Während der Laufzeit wird die Datenbank erweitert. Jetzt habe ich das Problem, dass sich natürlich der JTree nicht ändert.
Ich habe einige Threads hier im Forum gefunden, werde aber nicht schlau daraus. Brauche ich ein TreeModel?
Wenn ja, wie baue ich das ein? Ich habe keine Ahnung, wo bzw. wie ich das implementieren soll.
Vielen Dank im Voraus.

Code:
import java.util.ArrayList;

import javax.swing.JTree;
import javax.swing.tree.*;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultMutableTreeNode;

public class GalleryTree extends JTree
{
    public GalleryTree() {
        super(getRoot());
    }
    
    public static DefaultMutableTreeNode getRoot() {
        
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Galleries");
        
        ArrayList galleryList = new ArrayList();
        galleryList = Model.select_db("SELECT * FROM gallery ORDER BY title", 1);
        
        for(int i = 0; i < galleryList.size(); i++){
            Gallery gallery = (Gallery)galleryList.get(i);
            DefaultMutableTreeNode entryGallery = new DefaultMutableTreeNode(gallery.getTitle());
            root.add(entryGallery);
           }

        return root;
    }
}
 

happy_robot

Bekanntes Mitglied
Du brauchst generell immer ein TreeModel (-> DefaultTreeModel).

dann kannst du auf dem model ein reload() machen (bei grossen trees nicht sehr ratsam) oder für jeden node explizit eine event feuern welches den tree veranlasst den knoten neu zu laden.
 

sharpshooter

Mitglied
Danke happy_robot für die Info.

Ich habe die Klasse umgeschrieben und habe nun ein TreeModel:

Code:
import java.util.ArrayList;

import javax.swing.JTree;
import javax.swing.tree.*;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultMutableTreeNode;

public class GalleryTree extends JTree
{    
    public GalleryTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("Galleries");
        DefaultTreeModel treeModel = new DefaultTreeModel(root);
        
        ArrayList galleryList = new ArrayList();
        galleryList = Model.select_db("SELECT * FROM gallery ORDER BY title", 1);
        
        for(int i = 0; i < galleryList.size(); i++){
            Gallery gallery = (Gallery)galleryList.get(i);
            DefaultMutableTreeNode entryGallery = new DefaultMutableTreeNode(gallery.getTitle());
            root.add(entryGallery);
        }
        
        this.setModel(treeModel);
        
    }

}

Leider tut sich nichts, wenn ich die relaod- Methode aufrufe:
Code:
DefaultTreeModel model = (DefaultTreeModel)galleryTree.getModel();
model.reload();
Das steht in einer eigenen Klasse. Die Methode rufe ich zur Zeit über einen Button auf, leider wird aber nichts aktualisiert. Kann mir jemand helfen das Problem zu lösen, leider geht das etwas über mein derzeitiges Java- Verständnis hinaus.
Macht es eigentlich einen Unterschied, ob der JTree in einem ScrollPane liegt?

Gruß
 

happy_robot

Bekanntes Mitglied
hmm..ok..dann mal etwas erläuterung:

erstmal grundsätzliches:

JAVA trennt ganz klar die Daten (Model), die Ansicht (View) und das Verhalten (Controller).
Als Akronym nennt man dies MVC . Das ist die Philosophie oder das Paradigma.

Ein Tree ist grundsätzlich eine visuelle Komponente ist also nur für die Darstellung zuständig (das V aus MVC).
Das M also das Model für die Daten liegt immer definitiv in einer anderen Klasse (oder besser in einem Objekt einer Datenklasse).
Dies ist hier das DefaultTreeModel. Man kann dem JTree also jederzeit ohne grossen Aufwand ein neues Model unterjubeln (mit JTree.setModel) und er kann es direkt darstellen. Grundsätzlich eine tolle Sache.

Das Problem ist aber daß der JTree, wenn er jede kleine Änderung immer versuchen würde darzustellen dauernd am rödeln wäre. Wenn man mal einen Baum mit 100000 Knoten betrachtet die sich permanent ändern gibt's hier viel zu tun.
Aber......unser Baum ist etwas schlauer. Er lässt sich lieber von aussen sagen was sich geändert hat statt dieses stets zu überwachen. Dies wäre jetzt der Controller. Den Controller, also das C aus MVC, genau zuzuordnen ist oft schwierig (bei V und M gibts immer klare Zuordnungen). Bei einem JTree wurde er im Model untergebracht. D.h. daß das Model die Fähigkeit (besser: die Funktionalität) besitzt dem Baum mitzuteilen was er neu zeichnen soll. Im Gegensatz dazu entscheidet der Baum dann, ob es tatsächlich direkt notwendig ist oder nicht. Einen Knoten neu zu zeichnen den man nicht sieht wäre ja unötig.

Schau Dir doch einfach mal die API (also die Doku) zu DefaultTreeModel an. Dort wirst Du direkt Methoden entdecken mit denen Du dem Baum sagen kannst was sich geändert hat und was er neuzeuchnen soll.

Etwas verwirrend in der Terminologie der API-Doc ist für Anfänger wohl die Tatsache daß Methodennamen nur Zustandsänderung des Models selber beschreiben. Die Methoden im Model heissen also nicht "repaintInTree" oder so, sondern in unserem Falle "nodeChanged".

Ich hätte erwartet daß er bei reload den Baum neu zeichnet. Da habe ich mich vielleicht geirrt, kann sein (wundert mich aber trotzdem). Rufe doch für jeden Knoten der sich ändert mal "nodeChanged" auf.


EDIT: die JScrollPane ist insofern wichtig, damit der JTree auch immer ganz dargestellt werden kann. Hättest Du keine JScrollPane als Container könntest Du nicht in alle Bereiche des JTrees gehen wenn er grösser als der im zugewiesene Bereich wird. Wenn er grösser wirs als der sichtbare bereich des trees werden von der scrollpane scrollbalken eingeblendet mit denen du dann den sichtbaren bereich durchscrollen kannst (das ist dann der ViewPort).Bau dir mal nen grossen Baum und lass die Scrollpane mal weg. Dann siehst Du schnell warum sie wichtig ist.
 

sharpshooter

Mitglied
Danke dir für die Erklärungen! Ich habe mich eingelesen und etwas rumgestöbert nach Beispielen. Da es mit 'nodeChanged' irgendwie auch nicht zu funktionieren scheint, muss das Problem an einer anderen Stelle liegen. ???:L
Aber vielen Dank für deine Hilfe!
lg
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M JTree aktualisieren Java Basics - Anfänger-Themen 3
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
H Best Practice Wo wird der rootNode eines JTree gespeichert... Java Basics - Anfänger-Themen 0
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
R JTree bewegen Java Basics - Anfänger-Themen 6
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
P JTree aus txt Java Basics - Anfänger-Themen 8
M Warum wird mein Icon bei den JTree Nodes nicht angezeigt? Java Basics - Anfänger-Themen 7
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
M JTree + JTab Java Basics - Anfänger-Themen 3
T JTree füllen Java Basics - Anfänger-Themen 3
B JTree knoten wird nicht übernommen Java Basics - Anfänger-Themen 4
S JTree Hilfe Java Basics - Anfänger-Themen 6
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
F JTree mit JSpinner Java Basics - Anfänger-Themen 2
I Liste von Dateien anzeigen/JTree Java Basics - Anfänger-Themen 4
G Zugriff auf JTree-Objekt Java Basics - Anfänger-Themen 2
K Problem: JTree mit integrierten JCheckboxen Java Basics - Anfänger-Themen 5
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
D JTree ich dreh durch :D Java Basics - Anfänger-Themen 2
T JTree root setzten Java Basics - Anfänger-Themen 13
G xml Datei in JTree Java Basics - Anfänger-Themen 2
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
A JTree drucken Java Basics - Anfänger-Themen 2
M JTree und ein Button mit ActionListener Java Basics - Anfänger-Themen 3
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
G Filesystem in JTree anzeigen Java Basics - Anfänger-Themen 4
A Jtree Aufbau Java Basics - Anfänger-Themen 5
G JTree ilstener Java Basics - Anfänger-Themen 3
G JTree Java Basics - Anfänger-Themen 2
G Erstellten JTree aus einer XML-Datei akktualisieren Java Basics - Anfänger-Themen 11
S jTree initialisierung Java Basics - Anfänger-Themen 4
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G aussehen vom jtree wiederherstellen Java Basics - Anfänger-Themen 3
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
G Umbenennen im JTree Java Basics - Anfänger-Themen 5
G rechter Mausklick im JTree Java Basics - Anfänger-Themen 2
G Bilder im jTree Java Basics - Anfänger-Themen 3
G jTree Pfad merken Java Basics - Anfänger-Themen 2
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G JTree Problem. Java Basics - Anfänger-Themen 5
G JTree Java Basics - Anfänger-Themen 2
E JTree - Verzeichnisbaum Java Basics - Anfänger-Themen 3
G JTree Frage Java Basics - Anfänger-Themen 5
G Ebene von JTree ermitteln? Java Basics - Anfänger-Themen 6
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Standard JTree ausblenden? Java Basics - Anfänger-Themen 5
B JTree mit Verzeichnissen füllen Java Basics - Anfänger-Themen 17
G Object vor reload von JTree merken und danach wieder setzen? Java Basics - Anfänger-Themen 5
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
G Problem mit Refresh von JTree Java Basics - Anfänger-Themen 11
lomtas Scrollbalken für JTree Java Basics - Anfänger-Themen 3
lomtas JTree Struktur im Nachhinein ändern Java Basics - Anfänger-Themen 2
K JTree verlinken Java Basics - Anfänger-Themen 3
T ArrayList mit Dateien in die richtigen Ordner eines JTree Java Basics - Anfänger-Themen 16
K JTree aus DB rekursiv füllen Java Basics - Anfänger-Themen 12
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
G JTree vollständigen pfad anzeigen Java Basics - Anfänger-Themen 11
R JTree aus einer ArrayList Java Basics - Anfänger-Themen 9
J JTree Bilder Java Basics - Anfänger-Themen 2
G JTree.TreeListener Java Basics - Anfänger-Themen 12
S JTree valueChanged() Ausgabe leider immer mit Pfadangabe! Java Basics - Anfänger-Themen 4
G Scrollen im JTree Java Basics - Anfänger-Themen 17
G Hintergrundsfarbe für JTree Java Basics - Anfänger-Themen 15
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
J JTable / JTree: Unsichtbare Elemente Java Basics - Anfänger-Themen 4
G JTree Explorer Problem mit listRoots() Java Basics - Anfänger-Themen 9
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
J Progressbar aktualisieren Java Basics - Anfänger-Themen 17
C Timer aktualisieren Java Basics - Anfänger-Themen 5
TimoN11 Array mit unterschiedlichen längen aktualisieren, dann als Methodenwert einsetzen Java Basics - Anfänger-Themen 1
J Java FX - Label aktualisieren Java Basics - Anfänger-Themen 1
J Aktuelle Zeit in einer JavaFX Anwendung aktualisieren lassen Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
A Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
P WindowBuilder aktualisieren Java Basics - Anfänger-Themen 0
L Threads Laufbild Erzeugen Problem mit Aktualisieren des JPanels Java Basics - Anfänger-Themen 2
F Problem bei ImageIcon aktualisieren Java Basics - Anfänger-Themen 5
MrSnake Tabelleninhalt aktualisieren Java Basics - Anfänger-Themen 12
R Programm aktualisieren/refreshen Java Basics - Anfänger-Themen 7
2 Uhrzeit und Datum aktualisieren Java Basics - Anfänger-Themen 12
M Methoden Methoden aktualisieren Java Basics - Anfänger-Themen 2
M Liste mit repaint aktualisieren Java Basics - Anfänger-Themen 1
B Erste Schritte Anzeige von Graphics Objekten einzeln aktualisieren Java Basics - Anfänger-Themen 1
G Input/Output Webseite Cache-Control: max-age=3 Öfters Aktualisieren? Java Basics - Anfänger-Themen 1
J Bilder in Labels aktualisieren Java Basics - Anfänger-Themen 2
G Seite aktualisieren Java Basics - Anfänger-Themen 1
O JList aktualisieren während Dateieinlesung Java Basics - Anfänger-Themen 4
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben