2009-11-18 8 views
0

내 프로그램에는 두 개의 JTree가 있으며 두 가지 모두에 공통적 인 treeselection 수신기가 있습니다. 첫 번째 트리에서 노드를 선택한 다음 두 번째 트리에서 즉시 노드를 선택하면 문제가 발생합니다. 처음에 선택한 첫 번째 트리에서 돌아가서 동일한 노드를 선택하면 아무 일도 일어나지 않습니다. 어떻게 해결할 수 있습니까? valueChanged 이벤트 핸들러의 끝에서 노드를 선택 해제하는 방법이 있습니까?트리 선택과 관련된 Java 문제

편집 후

:

지금은

 if (tree == tree1){ 

     if(!tree2.isSelectionEmpty()){ 

      tree2.clearSelection(); 

     } 

    } else { 

     if(!tree1.isSelectionEmpty()){ 

      tree1.clearSelection(); 
     } 

    } 

나는 그것이 잘 작동 트리를 처음 선택을합니다. 그러나 두 번째로 다른 트리에서 선택하면 청취자가 두 번 해고 두 번 클릭하여 선택해야합니다. 어떤 단서?

답변

1

JTree (또는 JTable, JList 등)의 선택이 포커스를 잃어 버리면, 스윙은 그 선택을 클리어하지 않습니다. 이 논리를 직접 정의해야합니다. 따라서 예에서 첫 번째 트리에서 돌아가서 노드를 선택하면 노드가 이미 선택되어 있기 때문에 효과가 없습니다.

구현 예는 다른 하나를 선택하면 JTree을 선택 취소합니다.

public static class SelectionMaintainer implements TreeSelectionListener { 
    private final JTree tree1; 
    private final JTree tree2; 

    private boolean changing; 

    public SelectionMaintainer(JTree tree1, JTree tree2) { 
    this.tree1 = tree1; 
    this.tree2 = tree2; 
    } 

    public valueChanged(TreeSelectionEvent e) { 
    // Use boolean flag to guard against infinite loop caused by performing 
    // a selection change in this method (resulting in another selection 
    // event being fired). 
    if (!changing) { 
     changing = true; 
     try { 
     if (e.getSource == tree1) { 
      tree2.clearSelection(); 
     } else { 
      tree1.clearSelection(); 
     } 
     } finally { 
     changing = false; 
     } 
    } 
    } 
} 
+1

당신은 로봇인가요? ... tht는 빨리 reall이었다! – Thimmayya

+0

작동하지만 다시 한 트리에서 다른 트리로 전환 할 때 강조 표시되기 전에 노드를 두 번 클릭해야합니다. (처음으로 노드를 클릭하면 내가 찾고있는 동작이 트리거되지만 노드가 두 번째 클릭 후에 만 ​​강조 표시됩니다). 이 코드가 코드의 예상 과정입니까? – Goutham