在Eclipse中禁用TreeViewer的Alt + Enter

时间:2011-06-21 10:22:40

标签: java eclipse tree swt workbench


我在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 +输入不在其中一个树形浏览器上执行eclipse中的show属性?

最诚挚的问候, 凯沙夫

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

序列应为:

  • KeyDown:stateMask = 0和keyCode = 65536
  • KeyDown:stateMask = 65536和keyCode ='\ r'
  • KeyUp:stateMask = 65536 and keyCode ='\ r'
  • KeyUp:stateMask = 0和keyCode = 65536

答案 2 :(得分:1)

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

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

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