2012-12-18 2 views
1

JTree (모두 매우 유사한 내용 포함)에 선택한 노드가 동기화되어 있습니다 (각 노드에 동일한 노드가있는 경우).여러 JTree 객체에서 선택한 노드 동기화하기

현재 각 트리에 TreeSelectionListener을 추가하고 getSelectedPaths에 경로가없는 경우 setSelectedPath을 다른 트리에서 호출하여이 작업을 수행하고 있습니다.

그러나이 결과는 각 트리가 반복적으로 다른 노드를 선택하는 무한 사이클로 이어지는 것을 보았습니다. (이 노드를 드래그 할 때 나는 그것을 재현하는 방법을 모르지만 노드를 드래그 할 때 보았습니다).

트리 선택 수신기를 트리거하지 않고 선택한 경로를 설정하는 방법이없는 것 같아서 수신기를 제거하려는 경로로 이동하지 않을 것입니다.

나는 나무 사이에 TreeSelectionModel을 공유 할 가능성을 고려하고 있지만, 이것은 DefaultTreeSelectionModel 크기의 많은 작업처럼 보입니다.

동일한 결과를 얻을 수있는 다른 방법이 있습니까?

답변

2

깃발을 추가하십시오 .API. 나무에서 경로를 프로그래밍 방식으로 선택하고 경로가 설정된 후 다시 설정할 때 플래그를 설정합니다.

리스너는 isAPI == true인지 여부를 확인하고 수신기에서 돌아옵니다.

+0

'SwingUtilities2.invokeLater'에 대한 호출에서 setSelectionPath를 호출하면서이 값을 원래는 할인했을 것입니다. GUI 수신자 스레드에서 항상'TreeSelectionListener'가 호출되므로 불필요합니다. – SimonC