JFace TreeViewer 在选择时展开或折叠
JFace TreeViewer expand or collapse on selection
我已经为我的 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();
}
}
});
你对如何解决这个问题有什么建议吗?
对于 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);
}
}
}
这里的关键是使用 selection 作为 collapseToLevel
/ expandToLevel
.
的参数
只需更改以实现 ISelectionChangedListener
以处理选择。
使用 TreeViewer addDoubleClickListener
或 addSelectionChangedListener
添加监听器
我已经为我的 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();
}
}
});
你对如何解决这个问题有什么建议吗?
对于 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);
}
}
}
这里的关键是使用 selection 作为 collapseToLevel
/ expandToLevel
.
只需更改以实现 ISelectionChangedListener
以处理选择。
使用 TreeViewer addDoubleClickListener
或 addSelectionChangedListener