jtree遍历所有节点:
public static void visitAllNodes2(JTree tree) {
TreeNode root = (TreeNode)tree.getModel().getRoot();//取得tree的根节点
visitAllNodes(root);
}
public static void visitAllNodes(TreeNode node) {
// node is visited exactly once
if (node.getChildCount() >= 0) {//判断是否有子节点
for (Enumeration e=node.children(); e.hasMoreElements(); ) {
TreeNode n = (TreeNode)e.nextElement();
System.out.println(n);
visitAllNodes(n);//若有子节点则再次查找
}
}
}
jtree默认选中节点,这里有两个方法,根本原因是jtree在构造的时候所选择的参数不同造成的。
第一个方法:利用DefaultTreeModel 来构造的tree
DefaultTreeModel xx=(DefaultTreeModel)example5.getModel();//取得当前的树的模式,其中example5是jtree的对象
TreePath path=new TreePath(xx.getPathToRoot(Lightgray));//new一个treepath对象,取出节点对象是Lightgray的路径path,Lightgray对象的类型是DefaultTreeModel
example5.setSelectionPath(path);//用tree直接设置路径即可
第二种方法:利用DefaultMutableTreeNode构造tree
TreePath path=new TreePath(Lightgray.getPath());//lightgray是DefaultMutableTreeNode的对象,只用取得一个TreeNote的一个数组,直接new成一个path对象
example5.setSelectionPath(path);//直接设置取得即可
jtree默认展开所有节点:
/**
* tree默认节点展开
* @param tree
* @param parent
*/
private static void expandTree(JTree tree, TreePath parent) {
TreeNode node = (TreeNode) parent.getLastPathComponent();
if (node.getChildCount() >= 0) {
for (Enumeration<?> e = node.children(); e.hasMoreElements();) {
TreeNode n = (TreeNode) e.nextElement();
TreePath path = parent.pathByAddingChild(n);
expandTree(tree, path);//展开节点递归
}
}
tree.expandPath(parent);//展开该父节点下面的子节点
}