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

Java 如何获取JTree中当前节点的深度?,java,swing,jtree,treenode,depth,Java,Swing,Jtree,Treenode,Depth,我有一个包含几个节点和子节点的JTree。当我点击一个节点时,我想知道它的深度(0,1,3)。我怎么知道 selected_node.getDepth(); 不返回当前节点的深度。您应该使用getLevel。返回此节点上方的级别数--从根到此节点的距离。如果此节点是根节点,则返回0。或者,如果出于任何原因获得了Treenode[]路径(使用getPath()),则获取该数组的长度就足够了 getDepth是不同的,因为它返回在该节点扎根的树的深度。这不是您想要的。基本上您必须在JTree中迭

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

selected_node.getDepth(); 

不返回当前节点的深度。

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


getDepth
是不同的,因为它返回在该节点扎根的树的深度。这不是您想要的。

基本上您必须在
JTree
中迭代
,但是
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();
            }
        });
    }
}

如果您有一个处理
TreeSelectionEvent
TreeSelectionListener
,则可以使用该方法检索所选的
TreePath
s。该方法返回选定路径的深度


您也可以使用该方法直接向
JTree
(尽管您需要在选择更改时通知侦听器)。

哇,有趣的功能!我将按照匿名者的建议使用getLevel(),但也谢谢您,它可以派上用场:)