Java JTree collapse tree path

Description

Java JTree collapse tree path

import java.awt.Container;
import java.awt.FlowLayout;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class Main {
   public static void main(String args[]) {
      final JFrame f = new JFrame("JTree Demo");
      f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      Container c = f.getContentPane();
      c.setLayout(new FlowLayout());
      DefaultMutableTreeNode root = new DefaultMutableTreeNode("Computer");
      DefaultMutableTreeNode c1 = new DefaultMutableTreeNode("A");
      DefaultMutableTreeNode c2 = new DefaultMutableTreeNode("B");
      DefaultMutableTreeNode c3 = new DefaultMutableTreeNode("C");
      root.add(c1);/*from  w  ww.java2s  . co  m*/
      root.add(c2);
      root.add(c3);

      c1.add(new DefaultMutableTreeNode("1"));
      c1.add(new DefaultMutableTreeNode("2"));

      c2.add(new DefaultMutableTreeNode("3"));
      c2.add(new DefaultMutableTreeNode("4"));

      c3.add(new DefaultMutableTreeNode("5"));
      DefaultMutableTreeNode n6 = new DefaultMutableTreeNode("6");
      
      c3.add(n6);

      JTree t = new JTree(root);

      TreePath path = getPath(n6);

      collapsePath(t, path);

      c.add(new JScrollPane(t));
      f.pack();
      f.setVisible(true);
   }

   public static TreePath getPath(TreeNode node) {
      List list = new ArrayList();

      // Add all nodes to list
      while (node != null) {
         list.add(node);
         node = node.getParent();
      }
      Collections.reverse(list);

      // Convert array of nodes to TreePath
      return new TreePath(list.toArray());
   }

   public static void collapsePath(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);
              collapsePath(tree, path);
          }
      }
      tree.collapsePath(parent);
  }
}



PreviousNext

Related