Java Swing How to - Expand JTree for only level one nodes








Question

We would like to know how to expand JTree for only level one nodes.

Answer

import java.awt.BorderLayout;
import java.util.Enumeration;
//  w  ww .  j a va  2  s.co m
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;

public class Main {
  public static void main(String[] args) {
    JPanel panel = new JPanel(new BorderLayout());
    final JTree tree = new JTree();
    panel.add(new JScrollPane(tree));
    JButton btn = new JButton("Press Me");
    btn.addActionListener(et -> {
      for (Enumeration e = ((TreeNode) tree.getModel().getRoot()).children(); e
          .hasMoreElements();) {
        TreeNode tn = (TreeNode) e.nextElement();
        tree.expandPath(new TreePath(((DefaultTreeModel) tree.getModel())
            .getPathToRoot(tn)));
      }
    });
    panel.add(btn, BorderLayout.SOUTH);
    JFrame frame = new JFrame("");
    frame.getContentPane().add(panel);
    frame.setSize(300, 300);
    frame.setLocation(100, 100);
    frame.pack();
    frame.show();
  }
}