RealHAZZARD
Erfahrenes Mitglied
Ich habe da ein Problem mit meinem JTree.
Hab mir zu dem JTree noch eigene DeaultMutableTreeNodes gebaut, die wenn der eingebaute TreeSelectionListener es sagt, ihre Kinder aktualisieren.
Beim ersten Mal funktioniert das auch ganz gut, aber dann...
Szenario(ich fange bei Root mit 0 an zu zählen):
Ich markiere eine Node auf Ebene 1. Diese such nach Kindern und trägt diese bei sich ein.
Jetzt markiere ich eines der Kinder (also Enbene 2). Dieses aktualisiert seinen Inhalt auch.
Jetzt markiere ich wieder die ElternNode von vorhin (also Ebene 2).
Wenn ich jetzt wieder auf die KinderNodes (Ebene 2) gehe aktualisieren sich diese sich nichtmehr. Ist auch kein Wunder. Denn ab jetzt kommt auf meine Frage hin, wer denn ihr Root sei, nur noch die Antwort "Ich selbst". Es ist auch egal in welcher Ebene ich das mache (im Grunde genommen sind meine selbstgebauten Nodes eh alle gleich aufgebaut)
So viel dazu.
Jetzt mal zum Quellcode. Ich erspare euch den ganzen Code, da das son den zeitlichen Rahmen zu sehr ausdehnt.
Hier mal meine selbstgebaute Node
Jetzt mein Selectionlistener:
Ich hoffe Ihr könnt mir weiterhelfen.
THX
Hab mir zu dem JTree noch eigene DeaultMutableTreeNodes gebaut, die wenn der eingebaute TreeSelectionListener es sagt, ihre Kinder aktualisieren.
Beim ersten Mal funktioniert das auch ganz gut, aber dann...
Szenario(ich fange bei Root mit 0 an zu zählen):
Ich markiere eine Node auf Ebene 1. Diese such nach Kindern und trägt diese bei sich ein.
Jetzt markiere ich eines der Kinder (also Enbene 2). Dieses aktualisiert seinen Inhalt auch.
Jetzt markiere ich wieder die ElternNode von vorhin (also Ebene 2).
Wenn ich jetzt wieder auf die KinderNodes (Ebene 2) gehe aktualisieren sich diese sich nichtmehr. Ist auch kein Wunder. Denn ab jetzt kommt auf meine Frage hin, wer denn ihr Root sei, nur noch die Antwort "Ich selbst". Es ist auch egal in welcher Ebene ich das mache (im Grunde genommen sind meine selbstgebauten Nodes eh alle gleich aufgebaut)
So viel dazu.
Jetzt mal zum Quellcode. Ich erspare euch den ganzen Code, da das son den zeitlichen Rahmen zu sehr ausdehnt.
Hier mal meine selbstgebaute Node
Java:
class DataBaseNode extends DefaultMutableTreeNode
{
private String dbName = "";
public DataBaseNode (String name)
{
super(name);
dbName = name;
}
public boolean isParentConnected ()
{
ConnectionNode parent = (ConnectionNode)getParent();
return parent.isConnected();
}
//Hier der ProblemBär: (hier drin muss wohl mein Fehler liegen)
public boolean listTables()
{
ArrayList <String> allTables;
//Feststellung der übergeordneten Node
ConnectionNode parent = (ConnectionNode)getParent();
//listTables mach nur eine SQL-Abfrage(die funktioniert auch)
if (parent.isConnected())allTables = parent.connection.listTables(getUserObject().toString());
else return false;
//Erstmal die alten KinderNodes entfernen
removeAllChildren();
//Jetzt die neuen KinderNodes eintragen
for (String temp : allTables)
{
add(new TableNode(temp));
}
return true;
}
}
Java:
public void valueChanged(TreeSelectionEvent tse) {
DefaultMutableTreeNode temp = (DefaultMutableTreeNode) _tree_main.getLastSelectedPathComponent();
System.out.println("------------------------");
System.out.println(temp);
int levelFromRoot=temp.getLevel();
System.out.println("Root:"+temp.getRoot());
System.out.println("------------------------");
// Wenn der Root gewählt wurde
if (levelFromRoot==0)
{}
// Wenn eine ConnectionNode gewählt wurde
else if (levelFromRoot==1)
{
ConnectionNode selectedNode=(ConnectionNode)temp;
selectedNode.listDatabases();
}
// Wenn eine DatenbankNode gewählt wurde
else if (levelFromRoot==2)
{
DataBaseNode selectedNode = (DataBaseNode)temp;
selectedNode.listTables();
}
// Wenn eine TableNode gewählt wurde
else if (levelFromRoot==3)
{
TableNode selectedNode = (TableNode)temp;
selectedNode.listColums();
}
// Wenn eine ColumnNode gewählt wurde
else if (levelFromRoot==4)
{
ColumnNode selectedNode = (ColumnNode) temp;
}
}
Ich hoffe Ihr könnt mir weiterhelfen.
THX