Вертикальное выравнивание 2 jface TreeViewers для конкретного элемента - PullRequest
0 голосов
/ 23 января 2012

У меня есть два TreeViewer объекта на странице (2 столбца, по одному TreeViewer в каждом столбце), и я хочу выровнять дерево по вертикали при прокрутке или выделении другого.

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.
  }
});

Любой совет?

Ответы [ 2 ]

1 голос
/ 25 января 2012

Полный пример того, как синхронизировать две таблицы, см. В этом Фрагмент SWT .

1 голос
/ 24 января 2012

Из того, что я прочитал, прокрутка таблиц или деревьев невозможна напрямую (если это не изменилось за это время).Программное изменение положения большого пальца полосы прокрутки не приведет к изменению области просмотра таблицы / дерева.

Но вы можете попробовать, если у вас работает следующий фрагмент:

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

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

вызовите этот код в SelectionListener, зарегистрированном на вертикальной полосе прокрутки вашего дерева (tree.getVerticalBar()).

Синхронизация выбора довольно проста (если оба средства просмотра дерева отображают один и тот же вход / модель):

viewer.setSelection(otherViewer.getSelection)

(звонит ISelectionChangedListener из вашего вопроса).

...