7

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

selected_node.getDepth(); 

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

4

3 回答 3

9

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

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

于 2012-04-10T12:09:53.253 回答
3

基本上你必须在Iterate里面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();
            }
        });
    }
}
于 2012-04-10T12:14:11.880 回答
2

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

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

于 2012-04-10T12:20:46.687 回答