KeyListener仅在单击Button后才开始侦听

时间:2015-10-09 10:26:55

标签: java swt

目前我正在尝试将MKYong的KeyListener example集成到Eclipse RCP应用程序中。

我从注册Button的{​​{1}}获得了一些奇怪的行为,它只是在第一次点击按钮后才开始听键盘输入。

我希望能听到创建后发生的所有键盘事件。对我而言,我必须使用什么样的SWT KeyListener无关紧要。

任何想法都表示赞赏。

2 个答案:

答案 0 :(得分:2)

控件仅在具有键盘焦点时才会获得关键事件。

如果您想获取所有重要事件,可以使用addFilter

Display方法
Display.getDefault().addFilter(SWT.KeyDown, new Listener() {
   public void handleEvent(Event event)
   {
     // Handle key down event
   }
});

答案 1 :(得分:1)

您已将KeyListener添加到Button。当焦点获得焦点时,按钮会被通知keyEvent。如果要在整个窗口中侦听键盘事件,请将KeyListener添加到shell:

shell.addKeyListener(new KeyAdapter()...

如果要全局KeyListener添加显示过滤器:

Listener listener = new Listener() {

    @Override
    public void handleEvent(Event e) {
        if(e.type == SWT.KeyDown||e.type == SWT.KeyUp) {
            System.out.println("" + e.keyCode);
        }
    }
};
display.addFilter(SWT.KeyDown, listener);
display.addFilter(SWT.KeyUp, listener);