5

TreeViewersSWTに 2 つ入れていShellます。

それぞれに独自のスクロールバーがあります。ただし、両方のスクロールを同時に制御するのはScrollbar1つだけにしたいと思います。ShellTreeViewers

私が見つけた唯一の例は、ソース比較ビューです。しかし、彼らがどのようにこれを行ったのかわかりません - 私はしばらくの間、それを理解しようとしてきました. しかし、少なくとも私はそれが可能であることを知っています。

助言がありますか?

編集

私の最終的なインターフェースは、両方を制御するために左側に2TreeViewersつと 1 つあるはずです。Scrollbar

4

2 に答える 2

2

これはあなたを助けるはずです。スクロールを停止するSWT.NO_SCROLLために使用すると、垂直スクロールバーが非表示になり、トップインデックスが設定されているときにテーブルがスクロールされました。TreeTable

setTopItem(TreeItem)-read ドキュメントを使用します (treeitem には子アイテムがあるため)

テーブル

使用するsetTopIndex(int index)

例:

Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new GridLayout(2,false));
final Tree tree1 = new Tree(shell, SWT.BORDER | SWT.MULTI /*| SWT.NO_SCROLL*/);

for (int i = 0; i < 128; i++) {
  TreeItem item = new TreeItem(tree1, SWT.NONE);
  item.setText("Tree 1 Item" + i);
}
GridData data = new GridData(SWT.FILL, SWT.FILL, false, false);
data.heightHint=200;
tree1.setLayoutData(data);



final Tree tree2 = new Tree(shell, SWT.BORDER | SWT.MULTI);
tree2.setSize(200, 200);
for (int i = 0; i < 128; i++) {
  TreeItem item = new TreeItem(tree2, SWT.NONE);
  item.setText("Tree 2 Item" + i);
}
tree2.getVerticalBar().addSelectionListener(new SelectionListener() {

  @Override
  public void widgetSelected(SelectionEvent e) {
    TreeItem item = tree2.getTopItem();
    int i = tree2.indexOf(item);
     item = tree1.getItem(i);
    tree1.setTopItem(item); 
  }

  @Override
  public void widgetDefaultSelected(SelectionEvent e) {
  }
});
data = new GridData(SWT.FILL, SWT.FILL, false, false);
data.heightHint=200;
tree2.setLayoutData(data);

shell.pack();
shell.open();
while (!shell.isDisposed()) {
  if (!display.readAndDispatch())
    display.sleep();
}
display.dispose();
于 2013-07-18T21:10:10.143 に答える
0

これはあなたを助けるはずのコードですが、解決策ではありません。

他のスクロールバーを模倣する追加のスクロールバーを追加する方法がわかりませんでした。私が達成したことは、2つのスクロールバーの動きを連結することScolledCompositesです。たぶん、これはあなたの努力に少し役立ちます...

private static ScrolledComposite[] comps = new ScrolledComposite[2];

public static void main(String[] args)
{
    Display display = Display.getDefault();
    final Shell shell = new Shell(display);
    shell.setLayout(new FillLayout());

    createComposite(0, shell);
    createComposite(1, shell);

    shell.pack();
    shell.setSize(300, shell.getSize().y);
    shell.open();
    while (!shell.isDisposed())
    {
        if (!display.readAndDispatch())
            display.sleep();
    }
    display.dispose();
}

private static void createComposite(final int position, Shell parent)
{
     ScrolledComposite scrolled = new ScrolledComposite(parent, SWT.H_SCROLL | SWT.V_SCROLL);

    Composite content = new Composite(scrolled, SWT.BORDER);
    content.setLayout(new GridLayout(3, true));

    for(int i = 0; i < 9; i++)
    {
        Button button = new Button(content, SWT.PUSH);
        button.setText("Button " + i);
    }

    scrolled.setExpandHorizontal(true);
    scrolled.setExpandVertical(true);
    scrolled.setMinSize(content.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    scrolled.setContent(content);

    scrolled.getHorizontalBar().addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event e)
        {
            if(e.detail == SWT.DRAG)
            {
                ScrolledComposite source = comps[position];
                ScrolledComposite target = comps[(position + 1) % comps.length];
                int value = source.getHorizontalBar().getSelection();
                target.setOrigin(value, target.getOrigin().y);
            }
        }
    });

    comps[position] = scrolled;
}
于 2013-07-17T17:53:33.633 に答える