Это блок кода, который я использую для проверки нажатия клавиш.Если я нажму клавишу «esc», JFrame закроется.Но если я нажимаю клавишу «пробел», слушатель выполняет последнее нажатие кнопки JButton, а НЕ конкретную кнопку, которую я говорю, чтобы она нажимала.DoClick () также не запускается до тех пор, пока JButton не был предварительно нажат.
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent ke) {
if(ke.getKeyCode() == KeyEvent.VK_ESCAPE) {
SaveScripts.saveData(player);
dispose();
}
if(ke.getKeyCode() == KeyEvent.VK_SPACE) {
center.buttonMenuAttack.doClick();
}
}
});
Редактировать 1: Хорошо, после некоторого дополнительного тестирования, проблема заключается в том, что слушатель прерывается при щелчке чего-либо в кадре.
- Запуск программ
- Слушатель активен и работает.
- При щелчке по любому компоненту кадра слушатель прерывается
Редактировать2: Я закончил тем, что выбрал решение camickr, его гораздо проще настроить, и у меня не было проблем с его использованием.
InputMap events = getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
ActionMap actions = getRootPane().getActionMap();
events.put(KeyStroke.getKeyStroke("SPACE"), "click");
actions.put("click", new AbstractAction() {
public void actionPerformed(ActionEvent event) {
center.bAttack.doClick();
}
});
events.put(KeyStroke.getKeyStroke("ESCAPE"), "click");
actions.put("click", new AbstractAction() {
public void actionPerformed(ActionEvent event) {
manage.bDataExit.doClick();
}
});