2012-11-30 2 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 PC가 여전히 코드 작성을 수행하는 것이 좋습니다. 그렇지 않으면 염려 할 것입니다. – 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

관련 문제