By AdministratorUpdated: Sunday, 02 October 2011 07:35
Expand or Collapse all nodes in a JTree
Wednesday, 27 July 2011 14:05
Expand or collapse all nodes in a JTree
Swing’s JTree node component can be expanded or collapsed but nothing has been provided to expand or collapse all tree nodes using a single method. The following Tree utility class provides a method to fully expand or collapse recursively walking the tree and expanding or collapsing all nodes from the bottom up.
import java.util.Enumeration;
import javax.swing.JTree;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
/**
* Tree utils
*/
public class TreeUtils {
/**
* Expand or collapse all nodes
*
* @param tree
* @param expand
*/
static public void expandAll(JTree tree, boolean expand) {
TreeNode root = (TreeNode) tree.getModel().getRoot();
expandAll(tree, new TreePath(root), expand);
}
/**
* Expand all tree nodes
*
* @param tree
* subject tree
* @param parent
* parent tree path
* @param expand
* expand or collapse
*/
static private void expandAll(JTree tree, TreePath parent, boolean expand) {
TreeNode node = (TreeNode) parent.getLastPathComponent();
if (node.getChildCount() >= 0) {
for (@SuppressWarnings("unchecked")
Enumeration<TreeNode> e = node.children(); e.hasMoreElements();) {
TreeNode treeNode = (TreeNode) e.nextElement();
TreePath path = parent.pathByAddingChild(treeNode);
expandAll(tree, path, expand);
}
}
// Expansion or collapse must be done bottom-up
if (expand) {
tree.expandPath(parent);
} else {
tree.collapsePath(parent);
}
}
}
That code is wrong, it assumes that the Objects in the TreeModel implement TreeNode, which is not always true.
as said in http://download.oracle.com/javase/tutorial/uiswing/components/tree.html
"the TreeModel interface accepts any kind of object as a tree node. It does not require that nodes be represented by DefaultMutableT
reeNode objects, or even that nodes implement the TreeNode interface."
Comments
as said in http://download.oracle.com/javase/tutorial/uiswing/components/tree.html
"the TreeModel interface accepts any kind of object as a tree node. It does not require that nodes be represented by DefaultMutableT reeNode objects, or even that nodes implement the TreeNode interface."
RSS feed for comments to this post