package tree;
/*
* TreeAlwaysExpanded.java
*/
import java.awt.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class TreeAlwaysExpanded extends JFrame implements TreeExpansionListener{
private JTree tree;
public TreeAlwaysExpanded() {
super("Tree Always Expanded");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400,300);
setLocationRelativeTo(null);
tree = new JTree();
getContentPane().add(new JScrollPane(tree), BorderLayout.CENTER);
expandAll(tree, true);
tree.addTreeExpansionListener(this);
}
public void treeCollapsed(final TreeExpansionEvent event) {
tree.expandPath(event.getPath());
}
public void treeExpanded(final TreeExpansionEvent event) {}
// Wenn "expand" true ist, werden alle Nodes im Baum expandiert
// andernfalls werden alle Nodes im Baum geschlossen
public void expandAll(final JTree tree, final boolean expand) {
TreeNode root = ((TreeNode)tree.getModel().getRoot());
// Den Baum vom Root aus durchlaufen:
expandAll(tree, new TreePath(((DefaultTreeModel)tree.getModel()).getPathToRoot(root)), expand);
tree.requestFocusInWindow();
}
private void expandAll(final JTree tree, final TreePath parent, final boolean expand) {
// Die Kinder durchlaufen:
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);
expandAll(tree, path, expand);
}
}
// "expand" / "collapse" geschieht von unten nach oben
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
public static void main(final String args[]) {new TreeAlwaysExpanded().setVisible(true);}
}