Ручка нажатия клавиш в Java (глобально)

Я попробовал обычный способ обработки нажатия клавиш: реализует KeyListener и переопределить keyPressed(). Но есть много компонентов качелей, и если я в комбо-боксе, то комбо-бокс "думает", что ключ для него. Я хочу, чтобы основное приложение захватить нажатие клавиш, как?

3 ответа

Решение

Вы ищете это ключевые привязки

Вы можете использовать:

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

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

Это намного сложнее, чем вы думаете. Например, вот усилия, которые вы должны приложить, чтобы заставить эту работу работать с Panel с JFileChooser. Это аналогичный вопрос, который я задавал в прошлом. Я думаю, что это поможет вам решить вашу проблему. Вы должны прочитать оба ответа, так как они оба действительны.

Подводя итог, вы должны перебрать все InputMaps и родительские элементы InputMaps и очистить ключи, которые вы хотите использовать в глобальном масштабе. Затем примените свое действие к KeyMap.

Вам понадобится это:

private static void clearInputMap(InputMap inputMap) {
    inputMap.clear();
    while ((inputMap = inputMap.getParent()) != null) {
        inputMap.clear();
    }
}
Другие вопросы по тегам