双击树项目完全正常,但是当我在键盘上按 CTRL + M 时树项目展开\折叠,有人可以告诉我这背后的原因吗?这是 Eclipse 中的错误还是为什么当我按 CTRL+M 时会触发此双击功能。
谢谢。
双击树项目完全正常,但是当我在键盘上按 CTRL + M 时树项目展开\折叠,有人可以告诉我这背后的原因吗?这是 Eclipse 中的错误还是为什么当我按 CTRL+M 时会触发此双击功能。
谢谢。
用于TreeViewer.addDoubleClickListener
侦听树双击而不是鼠标侦听器。你可以使用这样的东西:
private class DoubleClickListener implements IDoubleClickListener
{
@Override
public void doubleClick(final DoubleClickEvent event)
{
final IStructuredSelection selection = (IStructuredSelection)event.getSelection();
if (selection == null || selection.isEmpty())
return;
final Object sel = selection.getFirstElement();
final ITreeContentProvider provider = (ITreeContentProvider)treeViewer.getContentProvider();
if (!provider.hasChildren(sel))
return;
if (treeViewer.getExpandedState(sel))
treeViewer.collapseToLevel(sel, AbstractTreeViewer.ALL_LEVELS);
else
treeViewer.expandToLevel(sel, 1);
}
}
更新: UsingTreeViewer.addDoubleClickListener
是对所有从StructuredViewer
.
每个双击侦听器都使用SafeRunnable
它来处理侦听器可能抛出的任何异常,这可以保护其余代码免受侦听器中的错误。
提供对模型对象数据的DoubleClickEvent
直接访问,因此无需处理Tree
对象TreeItem
来进行选择。
界面中的双击代码TreeViewer
正确与OpenStrategy
单击/双击打开代码。
我认为下面的代码会更好,因为它不会导致树项重新加载子项,并且会保持其他树项的原始状态。
_treeViewer.addDoubleClickListener( new IDoubleClickListener()
{
@Override
public void doubleClick( DoubleClickEvent event )
{
ISelection selection = event.getSelection();
if( selection instanceof ITreeSelection )
{
TreePath[] paths= ((ITreeSelection)selection).getPathsFor(selectedItem);
for (int i= 0; i < paths.length; i++)
{
_treeViewer.setExpandedState(paths[i], !_treeViewer.getExpandedState(paths[i]));
}
}
}
}
} );