我将两个TreeViewers
放在 SWTShell
中。
他们每个人都有自己的滚动条。但是,我希望只有一个Scrollbar
同时Shell
控制两者的滚动TreeViewers
。
我能够找到的唯一示例是在源比较视图中。但是,我看不出他们是怎么做到的——我一直试图弄清楚这一点。但至少我知道这是可能的。
有什么建议么?
编辑
我的最终界面应该在左侧有两个TreeViewers
和一个Scrollbar
来控制它们。
我将两个TreeViewers
放在 SWTShell
中。
他们每个人都有自己的滚动条。但是,我希望只有一个Scrollbar
同时Shell
控制两者的滚动TreeViewers
。
我能够找到的唯一示例是在源比较视图中。但是,我看不出他们是怎么做到的——我一直试图弄清楚这一点。但至少我知道这是可能的。
有什么建议么?
编辑
我的最终界面应该在左侧有两个TreeViewers
和一个Scrollbar
来控制它们。
这应该可以帮助你。当我使用SWT.NO_SCROLL
它Tree
停止滚动但是Table
,它隐藏了垂直滚动条,并且在设置顶部索引时滚动了表格。
树
使用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();
这是一些可以帮助您的代码,但这不是解决方案。
我不知道如何添加一个模仿其他滚动条的附加滚动条。我所做的是将两者的滚动条动作相互关联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;
}