spetrowitsch
asked on
How to get a root from a JTree?
Hi.
I wanted to get all leafs of a jTree. I made it like this, but that works only, if I have already the root.
DefaultMutableTreeNode t2;
String AllLeafs = "";
t2 = root;
while (t2 != null)
{ t2 = t2.getNextNode();
try
{ if (t2.isLeaf())
{ AllLeafs += "/" + t2.toString();
}
}
catch (Exception event)
{ t2 = null;
}
}
Then I wanted to get the root like this,
but there is a problem with getModel: it doesn´t get the DefaultTreeModel, but a TreeModel, and from TreeModel I don´t get a DefaultMutableTreeNode (the type of t2).
DefaultTreeModel treeMod = (DefaultTreeModel) jTree1.getModel();
t2 = treeMod.getRoot();
The second question is, how to find out, when my tree is finished? (I used the try-catch-method, but I would be interested in knowing the "official" solution.
Thanks so much in advance!!!
I wanted to get all leafs of a jTree. I made it like this, but that works only, if I have already the root.
DefaultMutableTreeNode t2;
String AllLeafs = "";
t2 = root;
while (t2 != null)
{ t2 = t2.getNextNode();
try
{ if (t2.isLeaf())
{ AllLeafs += "/" + t2.toString();
}
}
catch (Exception event)
{ t2 = null;
}
}
Then I wanted to get the root like this,
but there is a problem with getModel: it doesn´t get the DefaultTreeModel, but a TreeModel, and from TreeModel I don´t get a DefaultMutableTreeNode (the type of t2).
DefaultTreeModel treeMod = (DefaultTreeModel) jTree1.getModel();
t2 = treeMod.getRoot();
The second question is, how to find out, when my tree is finished? (I used the try-catch-method, but I would be interested in knowing the "official" solution.
Thanks so much in advance!!!
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
the java API states that getNextNode is inefficient for traversal... u should get a depthFirstEnumeration of the tree and then traverse that....
for ur first qn, y don't u just traverse the tree yourself? eg. (doesn't use DefaultMutableTreeNode)...
Stack s = new Stack();
TreeNode root = t;
TreeNode cur;
Enumeration e;
String AllLeafs = "";
while ((cur = root.getParent())!=null) root = cur;
s.push(root);
while (!s.empty()) {
cur = (TreeNode) s.pop();
if (cur.isLeaf()) {
AllLeafs+="/"+cur.toString
} else {
e = cur.children();
while (e.hasMoreElements()) s.push(e.nextElement());
}
}
// done.