Ручка нажатия клавиш в 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();
}
}