How can I listen for key presses (within Java Swing) across all components?

前端 未结 3 1788
傲寒
傲寒 2020-11-28 08:31

I would like to listen for key combinations such as Control+S without adding key listeners to each component in my Swing application. How can I achieve

3条回答
  •  谎友^
    谎友^ (楼主)
    2020-11-28 09:34

    It is possible.

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

    That will grab all key events. Returning false allows the keyboard focus manager to resume normal key event dispatching to the various components.

    If you want to catch key combos, you can keep a set of "pressed keys." Whenever a key is pressed, add it to the set and check what keys are already in the set. When a key is released, remove it from the set.

提交回复
热议问题