2012-04-10 10 views

答えて

8

現在のノードの深さを返しません

selected_node.getDepth(); 

.. getLevelは、このノードの上のレベル数を返します。ルートからこのノードまでの距離です。このノードがルートである場合は0を返します。Treenode[]パスを取得した理由(getPath()を使用)は、その配列の長さで十分です。

getDepthは、このノードをルートとするツリーの深さを返します。あなたが望むものではありません。あなたはTreeSelectionEventハンドルTreeSelectionListenerを持っている場合は、JTreeIterateに持って

+0

ありがとうございます。 –

3

basicalyが、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(); 
      } 
     }); 
    } 
} 
+0

うわー、興味深い機能!私は匿名の提案としてgetLevel()を使用しますが、それも便利に来ることができますありがとうございます:) –

2

のために、あなたが選択したTreePath秒を取得するためにTreeSelectionEvent#getPathsメソッドを使用することができます。 TreePath#getPathCountメソッドは、選択したパスの深さを返します。

JTree#getSelectionPathsメソッドを使用すると、JTreeに直接問い合わせることもできます(ただし、選択が変更されたときにリスナーに通知する必要があります)。

関連する問題