Expands all nodes in a JTree. - Java Swing

Java examples for Swing:JTree

Description

Expands all nodes in a JTree.

Demo Code


//package com.java2s;

public class Main {
    /**/*from   w  w w.  java 2 s .  co  m*/
     * Expands all nodes in a JTree.
     *
     * @param tree  The JTree to expand.
     * @param depth The depth to which the tree should be expanded.  Zero
     *              will just expand the root node, a negative value will
     *              fully expand the tree, and a positive value will
     *              recursively expand the tree to that depth.
     */
    public static void expandJTree(javax.swing.JTree tree, int depth) {
        javax.swing.tree.TreeModel model = tree.getModel();
        expandJTreeNode(tree, model, model.getRoot(), 0, depth);
    }

    /**
     * Expands a given node in a JTree.
     *
     * @param tree  The JTree to expand.
     * @param model The TreeModel for tree.
     * @param node  The node within tree to expand.
     * @param row   The displayed row in tree that represents
     *              node.
     * @param depth The depth to which the tree should be expanded.
     *              Zero will just expand node, a negative
     *              value will fully expand the tree, and a positive
     *              value will recursively expand the tree to that
     *              depth relative to node.
     */
    public static int expandJTreeNode(javax.swing.JTree tree,
            javax.swing.tree.TreeModel model, Object node, int row,
            int depth) {
        if (node != null && !model.isLeaf(node)) {
            tree.expandRow(row);
            if (depth != 0) {
                for (int index = 0; row + 1 < tree.getRowCount()
                        && index < model.getChildCount(node); index++) {
                    row++;
                    Object child = model.getChild(node, index);
                    if (child == null)
                        break;
                    javax.swing.tree.TreePath path;
                    while ((path = tree.getPathForRow(row)) != null
                            && path.getLastPathComponent() != child)
                        row++;
                    if (path == null)
                        break;
                    row = expandJTreeNode(tree, model, child, row,
                            depth - 1);
                }
            }
        }
        return row;
    }
}

Related Tutorials