JTree alle einträge sind root hä?

tekilla209

Mitglied
Hi Leute,

ich hab ein JTree gebaut der sieht auch ganz hübsch aus und hat auch mehrere ebenen, die man auf und zuklappen kann. Jezt muss ich aber bei klick auf eine der instanzen aus untere ebene die darüberliegene ebene wissen.

Ich hab alles mit DefaultMutableTreeNode gemacht

node.getLevel() liefert 2.
allerdings liefert node.getParent null.
und node.getRoot liefert node.

meine node wird also als root erkannt, obwohl sie 2 ebenen tiefer liegt. wie ist das möglich?
was muss ich tun damit die baumstruktur nicht nur optisch stimmt?
 
Moin!
Poste mal deinen Code, damit man sich das mal angucken kann..

*grüssle*
MeinerEiner
 
Also erstma so:
Code:
rs = stmt.executeQuery("SHOW DATABASES");
Vector<String> list = new Vector<String>();
while (rs.next())
{
	list.add(rs.getString(1));
}
JTree tree = new JTree(); 
DefaultMutableTreeNode top = new DefaultMutableTreeNode("tree");
Iterator it = list.iterator();
while(it.hasNext())
{
	DefaultMutableTreeNode node = new DefaultMutableTreeNode(it.next());
	node.setAllowsChildren(true);
	top.add(node);
}
MainWindow.setSidebar(new Sidebar(new JTree(top)));

So an dieser Stelle wird also der Baum erzeugt.
Und dann..

Code:
public void mouseClicked(MouseEvent arg0) 
{
	DefaultMutableTreeNode node = (DefaultMutableTreeNode)jtSidebar.getLastSelectedPathComponent();
	if (node.getLevel() == 1)
	{
		if (DBConnection.ChooseDatabase(node.toString()))
		{
			node.removeAllChildren();
			Vector<String> tables = DBConnection.getTables();
			Iterator it = tables.iterator();
			while (it.hasNext())
			{
				node.add(new DefaultMutableTreeNode(it.next()));
			}
		}
	}
	else
	{
		if (arg0.getClickCount() ==2)
		{
			//zeige tabelle im rechter fensterhälfte
			if (!DBConnection.getDBName().equals(node.getParent().toString()))  //an dieser stelle tritt der error auf weil getParent null zurück liefert.
			{
				DBConnection.ChooseDatabase(node.getParent().toString());
			}
			MainWindow.setDataPanel(new TableWindow("SELECT * FROM "+node.toString()));
		}
	}
}
 
Hallo,

wenn ich mich nicht verschaut hab, fügst du alle Nodes dem Root-Node hinzu. Damit ist von jedem Node der Parent der Root-Node. Warum der Parent null ist, kann ich nicht genau sagen, meine Vermutung ist, dass es daran liegt, dass der Root-Node auch nicht angzeigt werden kann.

MFG

zEriX
 
Falsch ich füge nicht alle Nodes dem Rootnode hinzu sondern den zuletzt ausgewählen.
Also erst frage ich den Datenbank-Server mit "SHOW DATABASES" (geht nur in MySQL) welche Datenbanken vorhanden sind. Die Ergebnisse davon füge ich dann dem Rootnode hinzu. Wenn ich jetzt doppelt auf eines dieser Nodes klicke mache ich "USE <ausgewählte_Node>" um die Datenbank zu wählen. Anschließend mache ich ein "SHOW FULL TABLES" und füge dessen Ergebnisse dem ausgewählem Node hinzu.

Wenn man dann doppelt auf eine der Nodes der 2. Ebene, also auf eine Tabelle klickt
(desshalb auch:
Code:
if (node.getLevel() == 1)
{
...
}
else
Jetzt geändert in: else if (node.getLevel() == 2)
)
möchte ich in einem anderen bereich des Fensters das die Tabelle anzeigen. Das funktioniert auch, aber nur dann, wenn ich vorher auf die richtige Datenbank geklickt habe, weil ich sonst nochmal ein "USE" machen müsste bevor ich "SELECT *..." machen kann.
Zu diesem zweck brauche ich also das:
Code:
if (!DBConnection.getDBName().equals(node.getParent().toString()))
und genau das geht eben nicht weil getParent null zurickgibt. Obwohl optisch alles toll aussieht. siehe Bild
 

Anhänge

  • Unbenannt.JPG
    Unbenannt.JPG
    8,3 KB · Aufrufe: 25
ja hab ich, ich befinde mich bei dem node was ich auch angeklickt habe
Code:
DefaultMutableTreeNode node = (DefaultMutableTreeNode)jtSidebar.getLastSelectedPathComponent();
Code:
System.out.println(node.toString());
bestätigt das auch

(jtSidebar ist der JTree)
 
Poste mal bitte den QuellCode, mit dem du die ganzen Unterknoten hinzufügst.

Oben ist nur der Code, der Kinder des Root-Knotens.

MFG

zEriX
 
hab ich schon geposted das ist teil von mouseClicked
DBConnection.getTables() liefert einen String-Vector mit den Tabellen der geklickten DB
daraus werden die nodes gebastelt.

Allerdings hab ich grad festgestellt, dass node.getLevel(), bei den unternodes der Datenbanken, also bei Abteilung, Firma etc. siehe Bild 0 liefert statt 2.
bei den nodes eine ebene Drüber (den datenbankname) liefert getLevel() korrekter Weise 1.

Wie kann das sein das Unternodes Rootnodes sind das gibt doch keinen Sinn
 
Zurück