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