【问题标题】:How to get depth of current node in JTree?如何获取 JTree 中当前节点的深度?
【发布时间】:2012-04-22 17:25:03
【问题描述】:

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

selected_node.getDepth(); 

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

【问题讨论】:

    标签: java swing jtree treenode depth


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      基本上你必须在JTree 中使用Iterate,但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();
                  }
              });
          }
      }
      

      【讨论】:

      • 哇,有趣的功能!我将按照 Anonymous 的建议使用 getLevel(),但也谢谢你,它可以派上用场:)
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-13
        • 2013-06-20
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 2018-06-21
        • 2012-07-15
        • 2012-07-10
        相关资源
        最近更新 更多