2012-04-10 4 views

ответ

8

Вы должны использовать getLevel. getLevel возвращает количество уровней над этим узлом - расстояние от корня до этого узла. Если этот узел является корнем, возвращает 0. В качестве альтернативы, если по какой-либо причине вы получили путь Treenode[] (используя getPath()), то достаточно взять длину этого массива.

getDepth отличается, так как он возвращает глубину дерева, укорененного на этом узле. Это не то, что вы хотите.

+0

Спасибо Anon. –

3

basicaly вы должны 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(); 
      } 
     }); 
    } 
} 
+0

Ничего себе, интересные функции! Я буду использовать getLevel() в качестве анонимного, но спасибо вам тоже может пригодиться :) –

2

Если у вас есть TreeSelectionListener, который обрабатывает TreeSelectionEvent, вы можете использовать метод TreeSelectionEvent#getPaths для извлечения выбранных TreePath сек , Метод TreePath#getPathCount возвращает глубину выбранного пути.

Вы также можете запросить его непосредственно на JTree (хотя вам потребуется прослушиватель, который будет уведомлен при изменении выбора) с помощью метода JTree#getSelectionPaths.

Смежные вопросы