在JFace中同步两个并排树中的滚动

时间:2013-05-24 20:03:01

标签: synchronization scrollbar jface

我希望在JFace中同步两个TreeViewer

我认为第一步是确切了解滚动条首先出现的原因。当我查看TreeViewer API时,我没有看到任何提及ScrollBar或任何子类或实现它的东西。

什么是定义它们并使它们出现在我的TreeViewer中(当我缩小窗口的大小时)?

然后,如何在两棵树之间同步滚动?

3 个答案:

答案 0 :(得分:0)

看看SWT“冻结列”snippet - 显然,这与你可以在所有平台上运行的SWT滚动位置同步一样接近。

请注意,SWT只能以编程方式滚动到表项,因此您可能无法实现平滑的滚动同步。

滚动条由底层本机树小部件管理。您可以通过将样式位传递给窗口小部件构造函数来尝试强制或禁用滚动条 - SWT.NO_SCROLL应禁用滚动条,SWT.H_SCROLL和SWT.V_SCROLL应始终显示相应的滚动条。请注意,这些标志只是提示 - 本机实现可能会忽略它们。

答案 1 :(得分:0)

你试试这个:

((Tree) yourTreeView.getControl()).getHorizontalBar().setValue(...);

答案 2 :(得分:0)

首先,您需要在TreeViewer树的左右两侧的VerticalScroll栏中添加 SelectionListener

leftTreeViewer.getTree().getVerticalBar().addSelectionListener(this);
rightTreeViewer.getTree().getVerticalBar().addSelectionListener(this);

然后在你的widgetSelected(SelectionEvent e)

@Override
public void widgetSelected(SelectionEvent e)
{
    if(e.getSource().equals(rightTreeViewer.getTree().getVerticalBar())){
        onTreeVerticalScrollSelected(rightTreeViewer, leftTreeViewer);
    }else if(e.getSource().equals(leftTreeViewer.getTree().getVerticalBar())){
        onTreeVerticalScrollSelected(leftTreeViewer, rightTreeViewer);
    }
}

private void onTreeVerticalScrollSelected(TreeViewer target, TreeViewer other){
    other.getTree().getVerticalBar().setSelection(target.getTree().getVerticalBar().getSelection());
}

这对我的Linux系统非常顺利。