我在树查看器上有一个选择更改的侦听器,其中如果我根据所选项单击树中的项目,则组合查看器的选择会相应地更改。
现在我需要在同一个树上实现双击功能,以便树展开并折叠隐藏选择更改的侦听器的功能。现在优先级是选择更改的侦听器,因此即使我向同一个树添加双击侦听器,也会触发选择更改事件。有没有办法在同一棵树上同时拥有选择更改侦听器(用于选择更改事件)和双击侦听器(扩展/折叠树项)?
IDoubleClickListener的代码
public class TreeViewerDblClkListener implements IDoubleClickListener {
@Override
public void doubleClick(DoubleClickEvent event) {
Object obj = event.getSource();
if (obj instanceof TreeViewer) {
TreeViewer viewer = (TreeViewer) obj;
ISelection selection = viewer.getSelection();
if (selection instanceof IStructuredSelection) {
Object item = ((IStructuredSelection) selection).getFirstElement();
if (viewer.getExpandedState(item)) {
viewer.collapseToLevel(item, AbstractTreeViewer.ALL_LEVELS);
} else {
viewer.expandToLevel(item, 1);
}
}
}
}
}
它会抛出一个断言失败的异常。
org.eclipse.core.runtime.AssertionFailedException: null argument:
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)
at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:73)
at org.eclipse.jface.viewers.AbstractTreeViewer.getExpandedState(AbstractTreeViewer.java:1202)
at com.commons.viewers.TreeViewerDblClkListener.doubleClick(TreeViewerDoubleClickListener.java:20)
at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:845)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
有人知道这里发生了什么吗?