Возможно ли создать пользовательский интерфейс, который выглядит и ведет себя как дерево SWT, но корни которого не относятся к типу TreeItem, а относятся к типу SWT Tree?UI, который выглядит и ведет себя как дерево SWT
Пример (развернуть/свернуть):
Tree 1
Child 1
Child 2
Tree 2
Child 1
Child 2
>Tree 1
>Tree 2
Добавить новый "Ребенок 3" к "Дерево 1":
Tree 1
Child 1
Child 2
Child 3
Tree 2
Child 1
Child 2
Вот что я пробовал:
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
public class LayoutExperiments {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
shell.setText("SWT Trees");
shell.setLayout(new FillLayout());
shell.setSize(400, 300);
GridLayout gridLayout = new GridLayout(1, true);
gridLayout.marginHeight = 0;
gridLayout.verticalSpacing = 0;
shell.setLayout(gridLayout);
final Tree tree1 = new Tree(shell, SWT.SINGLE);
createSomeNodes(tree1, "Tree 1");
final Tree tree2 = new Tree(shell, SWT.SINGLE);
createSomeNodes(tree2, "Tree 2");
tree1.addListener(SWT.Expand, new Listener() {
@Override
public void handleEvent(Event event) {
shell.layout();
}
});
tree1.addListener(SWT.Collapse, new Listener() {
@Override
public void handleEvent(Event event) {
shell.layout();
}
});
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private static void createSomeNodes(Tree tree, String rootName) {
TreeItem root = new TreeItem(tree, SWT.NONE);
root.setText(rootName);
for (int i = 0; i < 10; i++) {
TreeItem child = new TreeItem(root, SWT.NONE);
child.setText("Child of " + rootName);
}
}
}
Но, к сожалению, это не работает, как я ожидаю.
Не совсем уверен, что я понимаю. SWT 'Tree' может иметь несколько видимых« корней »(« Дерево 1 »и« Дерево 2 »). Разве это не то, что вы хотите? – Baz
@Baz Да, я знаю, что дерево SWT может иметь более одного «корня», которые имеют тип TreeItem. Но в моем случае уже много деревьев с собственными слушателями, меню (некоторые из них позволяют сделать один выбор, а некоторые нет), которые я не хочу переделывать и объединять в одно дерево SWT. Мне легче сделать их похожими на одно SWT-дерево. – ka3ak
Это справедливо. Я просто не мог сказать, о чем вы спрашивали, исходя из вопроса. Рад, что вы нашли решение. – Baz