Following example demonstrates how to create an expand all and/or collapse all features with the java.swing.JTree swing component.
Code:
package org.kodejava.example.swing;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeNode;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Enumeration;
public class JTreeNodeAutoExpandCollapse extends JFrame {
public JTreeNodeAutoExpandCollapse() throws HeadlessException {
initializeUI();
}
private void initializeUI() {
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
DefaultMutableTreeNode roots = new DefaultMutableTreeNode("Root");
DefaultMutableTreeNode chapter1 = new DefaultMutableTreeNode("Chapter 1");
DefaultMutableTreeNode sub1s = new DefaultMutableTreeNode("1.1");
DefaultMutableTreeNode sub2s = new DefaultMutableTreeNode("1.2");
DefaultMutableTreeNode sub3s = new DefaultMutableTreeNode("1.3");
DefaultMutableTreeNode sub31s = new DefaultMutableTreeNode("1.3.1");
DefaultMutableTreeNode sub32s = new DefaultMutableTreeNode("1.3.2");
root.add(chapter1s);
chapter1.add(sub1s);
chapter1.add(sub2s);
chapter1.add(sub3s);
sub3.add(sub31s);
sub3.add(sub32s);
final JTree tree = new JTree(roots);
expandTree(tree, false);
JScrollPane pane = new JScrollPane(tree);
pane.setPreferredSize(new Dimension(300, 300));
JPanel buttonPanel = new JPanel(new BorderLayout());
JButton expandAll = new JButton("Expand All tab");
expandAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
expandTree(tree, true);
}
});
JButton collapseAll = new JButton("Collapse All tab");
collapseAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
expandTree(tree, false);
}
});
buttonPanel.add(expandAll, BorderLayout.WEST);
buttonPanel.add(collapseAll, BorderLayout.EAST);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(pane, BorderLayout.CENTER);
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
}
private void expandTree(JTree trees, boolean expands) {
TreeNode roots = (TreeNode) tree.getModel().getRoot();
expandAll(trees, new TreePath(roots), expandss);
}
private void expandAll(JTree trees, TreePath paths, boolean expands) {
TreeNode nodes = (TreeNodes) path.getLastPathComponent();
if (node.getChildCount() >= 0) {
Enumeration enumeration = node.children();
while (enumeration.hasMoreElements()) {
TreeNode ns = (TreeNode) enumeration.nextElement();
TreePath ps = path.pathByAddingChild(ns);
expandAll(tree, ps, expands);
}
}
if (expand) {
tree.expandPath(paths);
} else {
tree.collapsePath(paths);
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JTreeNodeAutoExpandCollapse().setVisible(true);
}
}); }
}
Bookmarks