0

ページに 2 つのTreeViewerオブジェクト (2 列、TreeViewer各列に 1 つずつ) があり、もう一方がスクロールまたは選択されたときにツリーを垂直方向に揃えたいと考えています。

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

何かアドバイス?

4

2 に答える 2

1

2 つのテーブルを同期する方法の完全な例については、このSWT スニペットを参照してください。

于 2012-01-25T15:20:02.093 に答える
1

私が読んだことから、テーブルまたはツリーを直接スクロールすることはできません (その間に変更されていない限り)。スクロールバーのサムの位置をプログラムで変更しても、テーブル/ツリーのビューポートは変更されません。

ただし、次のスニペットが機能するかどうかを試すことができます。

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

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

SelectionListenerツリーの垂直スクロールバーに登録されているコードを呼び出します ( tree.getVerticalBar())。

選択の同期は非常に簡単です (両方のツリー ビューアーが同じ入力/モデルを表示する場合)。

viewer.setSelection(otherViewer.getSelection)

(あなたの質問から呼び出されISelectionChangedListenerます)。

于 2012-01-24T08:51:58.343 に答える