我为树查看器提供了一个双击功能,其中双击树项目时它们会展开\折叠。那完全没问题,但是问题是,即使我在键盘上按CTRL + M时,即使树项展开\折叠,我也不想发生这种情况。我双击树项目的代码如下:
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);
}
}
仅当我使用IDoubleClickListener接口并覆盖方法doubleClick()时,才会发生此行为(CTRL + m扩展树项),但是当我使用时,不会发生相同的行为(CTRL + m扩展树项):
addMouseListener(new MouseListener())
并重写方法:
mouseDoubleClick()。
行为(CTRL + M)扩展树项目是与IDoubleClickListener接口相关的(如果是,原因是什么)还是此问题是普遍的?我觉得它不应该与IDoubleClickListener有关,有人可以告诉我为什么使用这两种逻辑会有区别吗?
最佳答案
Ctrl + M通常与Return键相同。 SWT使用的本机树控件通常将Return视为意味着扩展/折叠当前树节点。
要停止此操作,请在树中添加KeyListener
并抑制不需要的按键事件:
treeViewer.getTree().addKeyListener(new KeyAdapter()
{
@Override
public void keyPressed(final KeyEvent event)
{
if (event.keyCode == SWT.CR ||
(event.keyCode == 'm' && event.stateMask == SWT.CTRL))
{
event.doit = false;
}
}
});
更新:
采用:
if (e.keyCode == 'm' && e.stateMask == (SWT.CTRL | SWT.SHIFT))
测试Ctrl + Shift + m
if (e.keyCode == 'm' && e.stateMask == SWT.CTRL)
测试Ctrl + m
if (e.keyCode == SWT.CR)
测试Enter。