如何获取JTree中当前节点的深度?

时间:2012-04-10 12:05:08

标签: java swing jtree treenode depth

我有一个带有几个节点和子节点的JTree。当我点击一个节点时我想知道它的深度(0,1,3)。我怎么知道?

selected_node.getDepth(); 

不返回当前节点的深度..

3 个答案:

答案 0 :(得分:8)

您应该使用getLevelgetLevel返回此节点上方的级别数 - 从根节点到此节点的距离。如果此节点是根节点,则返回0.或者,如果由于某种原因您获得了Treenode[]路径(使用getPath()),那么获取该数组的长度就足够了。

getDepth不同,因为它返回以此节点为根的树的深度。这不是你想要的。

答案 1 :(得分:3)

基本上你必须在IterateJTree,但TreeSelectionListener可以返回有趣的值,例如

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;

public class TreeSelectionRow {

    public TreeSelectionRow() {
        JTree tree = new JTree();
        TreeSelectionListener treeSelectionListener = new TreeSelectionListener() {

            @Override
            public void valueChanged(TreeSelectionEvent treeSelectionEvent) {
                JTree treeSource = (JTree) treeSelectionEvent.getSource();
                System.out.println("Min: " + treeSource.getMinSelectionRow());
                System.out.println("Max: " + treeSource.getMaxSelectionRow());
                System.out.println("Lead: " + treeSource.getLeadSelectionRow());
                System.out.println("Row: " + treeSource.getSelectionRows()[0]);
            }
        };
        tree.addTreeSelectionListener(treeSelectionListener);
        String title = "JTree Sample";
        JFrame frame = new JFrame(title);
        frame.add(new JScrollPane(tree));
        frame.setSize(300, 150);
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                TreeSelectionRow treeSelectionRow = new TreeSelectionRow();
            }
        });
    }
}

答案 2 :(得分:2)

如果您有TreeSelectionListener来处理TreeSelectionEvent,则可以使用TreeSelectionEvent#getPaths方法检索所选的TreePathTreePath#getPathCount方法返回所选路径的深度。

您也可以直接向JTree询问(尽管您需要在选择更改时通知听众),使用JTree#getSelectionPaths方法。