Java 禁用Alt+;在Eclipse中输入TreeViewer

Java 禁用Alt+;在Eclipse中输入TreeViewer,java,eclipse,tree,swt,workbench,Java,Eclipse,Tree,Swt,Workbench,我已经在SWT中的树中添加了一个键侦听器,当我按下Alt+时,输入键事件的状态为keyCode=65536和statemask=0,此时它应该是keyCode='\r'和statemask=65536。 下面是我编写的代码片段- mViewer.getTree().addListener(SWT.KeyDown, new Listener() { @Override public void handleEvent(Event e) {



我已经在SWT中的树中添加了一个键侦听器,当我按下Alt+时,输入键事件的状态为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 workbench在将事件委托给组件中的侦听器之前过滤一些事件。有没有一种方法可以禁用alt+enter以不在其中一个TreeViewer上执行eclipse中的show属性

致以最良好的祝愿,
Keshav

请尝试以下代码:

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;

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

顺序应为:

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

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

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

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

您能尝试调试该事件吗?这个活动有人打电话吗?价值观是什么?等等,我忘了提到这是在eclipse工作台中,工作台似乎在将事件委托给组件中的侦听器之前过滤了一些事件。有什么方法可以在我想要的组件上禁用这些筛选?您可以使用
Display.addFilter(…)
而不是
Control.addListener(…)
。这确实保证了您可以看到所有事件,但这些事件可能会被修改,因为先前的筛选器可以根据需要修改事件-通常设置为
event.type=SWT.None
event.doit=false
,尽管其他更改也是可能的,而且也是合法的。。。我已经在很多情况下使用它来修复不同SWT实现中的特殊性。当然,为了完整性,我应该提到,操作系统可以随心所欲地吃任何事件,特别是关键事件。例如Windows下的Alt Ctl Del和OSX下的F9。您对描述的更改不是很多吗?