KeyListener 只有在 Button 被点击后才开始监听

KeyListener starts listening only after Button is clicked

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

我在 Button 注册 KeyListener 时出现一些奇怪的行为,它仅在第一次单击按钮后才开始侦听键盘输入。

我希望它监听创建后发生的所有键盘事件。对我来说,我必须使用哪种 SWT Control 是无关紧要的。

如有任何想法,我们将不胜感激。

控件仅在具有键盘焦点时才获取按键事件。

如果你想得到所有按键事件你可以使用Display

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

您已将 KeyListener 添加到 Button。按钮在获得焦点时会收到 keyEvent 通知。如果您想在整个 window 中监听键盘事件,请将 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);