键盘上的控制键+ M触发SWT中树项目上的双击功能

时间:2014-05-14 10:36:41

标签: java treeview swt

我有一个树形查看器的双击功能,当我双击它们时,树项扩展\折叠。这是完全没问题,但问题是,当我按下键盘上的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);
  }
}

此行为(CTRL + m扩展树项)仅在我使用IDoubleClickListener接口并覆盖方法doubleClick()时发生,但在使用时不会发生相同的行为(CTRL + m扩展树项)     addMouseListener(new MouseListener()) 并覆盖该方法:     mouseDoubleClick()。 行为(CTRL + m)是否扩展了与IDoubleClickListener接口相关的树项(如果是这样的原因)或者这个问题是通用的吗?我觉得它不应该与IDoubleClickListener有关,有人可以告诉我为什么使用这两个逻辑有什么不同?

1 个答案:

答案 0 :(得分:2)

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。