我有一个 JFrame(包含各种文本字段和表格等)并且想要安装一个热键功能,该功能在框架打开时应用(有点像菜单加速器快捷方式)。以下大部分有效,无论哪个字段或控件具有焦点,都会调用我的操作:
String MY_GLOBAL_ACTION_TRIGGER = "hotKey";
InputMap im = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
KeyStroke ks = KeyStroke.getKeyStroke('`');
im.put(ks, MY_GLOBAL_ACTION_TRIGGER);
ActionMap am = getRootPane().getActionMap();
am.put(MY_ACTION_TRIGGER, new AbstractAction() { public void actionPerformed() ... });
但是,按键没有被消耗,我仍然在文本字段中插入了反引号。一旦我的操作被调用,如何防止按键被传播到文本字段?
最佳答案
使用 KeyboardFocusManager 和 KeyEventDispatcher
private void myListener implements KeyEventDispatcher {
public boolean dispatchKeyEvent (KeyEvent ke) {
if (ke.getKeyChar() == '`') {
MY_GLOBAL_ACTION.actionPerformed(null);
return true;
}
return false;
}
}
关于Java Swing : consuming key events,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27626596/