1



我在 SWT 的树中添加了一个键侦听器,当我按下 Alt+Enter 键事件的状态是 keyCode = 65536 和 statemask = 0,它应该是 keyCode='\r' 和 statemask=65536。
下面是我写的代码片段-

mViewer.getTree().addListener(SWT.KeyDown, new Listener() {
            @Override
            public void handleEvent(Event e) {
                if(e.keyCode == SWT.CR && e.stateMask == SWT.ALT) {
                    e.doit = false;
                }
            }
        });

Eclipse 工作台在将事件委托给组件中的侦听器之前过滤一些事件。有没有办法我可以禁用 alt+enter 以不在其中一个 treeviewer 上执行 eclipse 中的显示属性?

最好的问候, 凯沙夫

4

3 回答 3

1

试试下面的代码:

mViewer.getTree().addKeyListener(new KeyAdapter() {
    @Override
    public void keyPressed(KeyEvent e) {
        if(e.keyCode == SWT.CR && e.stateMask == SWT.ALT) {
            // your code
            e.doit = false;
        }
    }
});

以及您需要的进口商品:

import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
于 2011-06-21T12:01:54.777 回答
1

您将看到所有按键/按下事件 - 即使键是状态键。所以第一个事件是Alt按键按下...

顺序应该是:

  • KeyDown:stateMask=0 和 keyCode=65536
  • KeyDown:stateMask=65536 和 keyCode='\r'
  • KeyUp:stateMask=65536 和 keyCode='\r'
  • KeyUp:stateMask=0 和 keyCode=65536
于 2011-06-23T12:13:56.207 回答
1

您可以通过多种不同方式覆盖特定查看器的特定全局命令:

  • 添加一个侦听器以过滤掉键序列 - 尽管并非总是可能的。
  • 添加Display过滤器以执行相同的操作 - 可以在查看器控件的焦点输入/输出处添加/删除过滤器。
  • 向应用程序添加新上下文并覆盖新上下文所需的键绑定 - 在查看器控制的焦点输入/输出处激活/停用上下文

我更喜欢最后一种解决方案,因为我可以使用普通绑定扩展点从任何插件覆盖查看器的特定键绑定......

于 2011-06-28T14:56:22.367 回答