处理java中的按键(全局)

时间:2013-06-11 21:49:50

标签: java swing keylistener key-bindings key-events

我尝试了常用的方法来处理keypress:实现KeyListener并覆盖keyPressed()。但是有许多摆动组件,如果我在组合框中,组合框“认为”关键是他。我想主要的应用程序捕获按键,如何?

3 个答案:

答案 0 :(得分:4)

您正在寻找此Key Bindings

答案 1 :(得分:3)

您可以使用:

KeyEventPostProcessor kepp = new KeyEventPostProcessor() {
  @Override 
  boolean postProcessKeyEvent(KeyEvent e) {
     // handle key event globally
  }
};

KeyboardFocusManager kfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
kfm.addKeyEventPostProcessor(kepp);

答案 2 :(得分:1)

这比你想象的要难。例如,here's the effort you have to put in to get this working on a Panel with a JFileChooser in it.这是我过去问过的类似问题。我认为这将有助于您解决问题。您应该阅读两个答案,因为它们都是有效的。

总而言之,您必须迭代所有InputMaps和InputMaps的父级,并清除您想要全局使用的密钥。然后将您的操作应用于KeyMap。

你需要这个:

private static void clearInputMap(InputMap inputMap) {
    inputMap.clear();
    while ((inputMap = inputMap.getParent()) != null) {
        inputMap.clear();
    }
}