Это должно помочь вам. Когда я использовал SWT.NO_SCROLL
для Tree
, он останавливал прокрутку, но Table
, он прячет вертикальную полосу прокрутки, а таблица была прокручена, когда установлен верхний индекс.
Дерево
использование setTopItem(TreeItem)
-Распознать документации (как 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();
Вы имеете в виду, что у них обоих есть полоса прокрутки, но перемещение одного приведет к перемещению другого или вы хотите, чтобы какой-нибудь прокручиваемый пробел перемещал оба композита? – Baz
У них обоих есть своя полоса прокрутки, перемещающая каждую из них независимо. Я хотел бы иметь одну полосу прокрутки, которая перемещает оба в одно и то же время (оба дерева всегда одного размера). (P.S. Рад, что вы на борту @Baz :) – CodyBugstein
Итак, вы хотите 3 всего? – Baz