我已经为我的treeviewer实现了一个选择侦听器,以便在选择时展开或折叠节点。 此实现适用于折叠,但不会扩展节点。
this.getTree().addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
TreeItem treeItem = (TreeItem) event.item;
if (treeItem.getItems().length > 0) {
if (MyTreeViewer.this.getExpandedState(treeItem)) {
MyTreeViewer.this.collapseToLevel(treeItem, MyTreeViewer.this.ALL_LEVELS);
} else {
MyTreeViewer.this.expandToLevel(treeItem, 1);
}
MyTreeViewer.this.refresh();
}
}
});
您对如何解决此问题有任何建议吗?
答案 0 :(得分:1)
对于JFace TreeViewer,您应该使用ISelectionChangedListener
或IDoubleClickListener
- 不要使用底层的Tree侦听器,因为它们可能无法与查看器正确交互。
这是我用于双击的内容:
public class TreeDoubleClickListener implements IDoubleClickListener
{
@Override
public void doubleClick(final DoubleClickEvent event)
{
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
if (selection == null || selection.isEmpty())
return;
Object sel = selection.getFirstElement();
TreeViewer treeViewer = (TreeViewer)event.getViewer();
IContentProvider provider = treeViewer.getContentProvider();
if (provider instanceof ITreeContentProvider)
{
ITreeContentProvider treeProvider = (ITreeContentProvider)provider;
if (!treeProvider.hasChildren(sel))
return;
if (treeViewer.getExpandedState(sel))
treeViewer.collapseToLevel(sel, AbstractTreeViewer.ALL_LEVELS);
else
treeViewer.expandToLevel(sel, 1);
}
}
}
这里的关键是使用选择作为collapseToLevel
/ expandToLevel
的参数。
只需更改即可实施ISelectionChangedListener
以进行选择。
使用TreeViewer addDoubleClickListener
或addSelectionChangedListener