2012-01-22 3 views
0

페이지에 두 개의 TreeViewer 개체가 있습니다 (2 열, 각 열에 TreeViewer). 다른 하나를 스크롤하거나 선택할 때 세로로 트리를 정렬하려고합니다. 세로 맞춤 2 트리 뷰어 특정 요소에

import org.eclipse.jface.viewers.TreeViewer; 
import org.eclipse.swt.widgets.Tree; 

나는 솔루션

treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { 
    @Override 
    public void selectionChanged(SelectionChangedEvent arg0) { 
    TreeViewer mirrorTree = (treeViewer == treeVwrSource ? treeVwrTarget : treeVwrSource); 
    // find position of selected element (element x) in treeViewer 
    // set position of element x in mirrorTree, it is already selected. 
    } 
}); 

어떤 조언 같은 모양해야한다고 생각?

답변

1

내가 읽은 바로는 테이블이나 나무를 스크롤하는 것이 가능하지 않습니다 (그 동안 변경되지 않았다면). 스크롤 바의 샘의 위치를 ​​프로그램 적으로 변경해도, 테이블/트리의 뷰포트는 변경되지 않습니다.

그러나 다음 코드는 당신을 위해 작동하는 경우에 당신은 시도 할 수 :

Tree tree1 = ...; 
Tree tree2 = ...; 

int topIndex = tree1.indexOf(tree1.getTopItem()); 
tree2.setTopItem(tree2.getItem(topIndex)); 

당신은 당신의 나무 (tree.getVerticalBar())의 수직 스크롤에 등록 된 SelectionListener에서 해당 코드를 호출합니다. 선택을 동기화

은 (두 나무 시청자가 동일한 입력/모델을 표시하는 경우) 매우 간단합니다 :

(질문에서 ISelectionChangedListener에 의해 호출)
viewer.setSelection(otherViewer.getSelection) 

.

+0

안녕하세요. 당신의 도움을 주셔서 감사합니다. 나는이 접근법을 시도했고, tree1.getTopItem()은 예상대로 스크롤 한 후에 맨 위에 나열된 항목을 반환합니다. 그러나, tree1.indexOf (...), 항상 -1, 스크롤하는 방향을 반환합니다 ... – karnbo

+0

BTW 'setSelection'잘 작동합니다. 그러나, 나는 여기 정렬과 같은 문제가있다 ... 오른쪽 창에서의 선택은 맨 위에있을 수 있고 왼쪽 창 선택은 아래쪽에있을 수있다 ... 실제로는 매우 불안하다 ... – karnbo

+0

'indexOf (..)': "아이템이 발견되지 않으면 -1을 반환합니다." 그래서 '나무'는 방금 준 물건을 찾지 못했습니까? 그건별로 의미가 없습니다. 'tree1.indexOf (tree1.getTopItem()); '가 -1을 반환 할 수있는 이유를 생각할 수 없습니다. – p12t

1

두 테이블을 동기화하는 방법에 대한 전체 예제는 SWT Snippet을 참조하십시오.

+0

안녕하세요. 네, 아마도 해결책은 대신 테이블을 사용하는 것입니다. 'table2.setTopIndex (table1.getTopIndex())'트릭을 수행하는 것 같습니다. 나는 곧 다른 해결책을 찾지 않으면 이것을 시도 할 것입니다. 감사. – karnbo