jTree的遍历所有节点,默认选择节点,默认展开节点

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);//展开该父节点下面的子节点

}

你可能感兴趣的:(JTree)