2012-11-30 78 views
0

我有幾個節點樹,也創建一個樹聽衆,現在我需要得到特定的節點路徑,當它被點擊, 我試過這段代碼,但沒有得到確切的輸出任何人都可以幫助我嗎?如何在單擊樹時從JTree獲取節點路徑?

public class FTListener implements TreeSelectionListener { 


    @Override 
    public void valueChanged(TreeSelectionEvent e) { 
     TreePath[] tree=new TreePath[e.getNewLeadSelectionPath().getPathCount()]; 
     int i=0; 

     tree=e.getPaths(); 

     for(TreePath tr:tree){ 
      System.out.println(tree[i]); 
     i++;} 

     //getPath() returns the array elements so i'm here using 
    //for loop for printing each elements. 

這是輸出

[/Desktop, /home/user/Desktop, /home/user/Desktop/1302677132563_USER_MANUAL_SMS_BANKING.pdf] 
[/Desktop, /home/user/Desktop, /home/user/Desktop/Lab090C .java~] 
+2

什麼問題?你有兩個選擇的路徑,他們都打印,因爲你編碼它:-) – kleopatra

+0

@kleopatra好東西,電腦仍然完成我們的代碼。我會開始擔心否則 – Robin

回答

1

做這個

public void valueChanged(TreeSelectionEvent e) { 

    DefaultMutableTreeNode node = (DefaultMutableTreeNode) 
         tree.getLastSelectedPathComponent(); 

    if (node == null) { 
    //since Nothing is selected.  
    return; 
    } 

    Object nodeObject = node.getUserObject(); 
    System.out.println("Selected node : " + nodeObject); 
} 

添加這個,如果你只想要一個選擇

tree.getSelectionModel().setSelectionMode 
     (TreeSelectionModel.SINGLE_TREE_SELECTION); 
+0

爲什麼轉換爲'DefaultMutableTreeNode'?用你自己的對象創建一個JTree是完全可能的。 – Robin

+0

@Robin我認爲'DefaultMutableXxx'是有利的,但同意''重新發明輪子' – mKorbel

+0

@mKorbel我同意有很多情況下很容易重用'DefaultMutableTreeNode'。但在這個問題的情況下,沒有什麼建議他/她使用'DefaultMutableTreeNode'實例,這使得這個答案太具體。 – Robin