我有一个 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/

10-10 15:16