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

2022-09-01 11:37:11

我想侦听组合键(如 +),而不向 Swing 应用程序中的每个组件添加键侦听器。我怎样才能做到这一点?ControlS


答案 1

这是可能的。

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

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

如果你想捕捉键连击,你可以保留一组“按下的键”。每当按下某个键时,将其添加到该组中,并检查该组中已有哪些键。释放密钥后,将其从密钥集中移除。


答案 2

我不认为有办法像你想要的那样添加一个“全局”密钥监听器。这个带有类似问题的论坛帖子支持我。您只需要将它们添加到每个组件中即可。这应该只需要做一次,所以我想你可以把它弄过来,然后继续前进。


推荐