如何在所有组件中监听按键(在Java Swing中)?

dio*_*emo 26 java swing keylistener

我想在没有为Swing应用程序中的每个组件添加键监听器的情况下监听诸如Control+之类的组合S键.我怎样才能做到这一点?

Mat*_*ogt 56

有可能的.

KeyboardFocusManager.getCurrentKeyboardFocusManager()
  .addKeyEventDispatcher(new KeyEventDispatcher() {
      @Override
      public boolean dispatchKeyEvent(KeyEvent e) {
        System.out.println("Got key event!");
        return false;
      }
});
Run Code Online (Sandbox Code Playgroud)

这将抓住所有关键事件.返回false允许键盘焦点管理器恢复正常的键事件调度到各种组件.

如果你想捕捉关键的组合,你可以保留一组"按下的键".每当按下一个键时,将其添加到该组中并检查该组中已有的键.释放钥匙后,将其从设备中取出.

  • 此代码返回每次按键的所有事件,即对于一次按键,将发生KEY_PRESSED,KEY_RELEASED和KEY_TYPED事件.要进一步过滤以给出一个事件,可以添加代码if(KeyEvent.KEY_PRESSED == e.getID()){...}以过滤KEY_PRESSED事件,例如. (4认同)