JButton doClick () выполняет последнюю нажатую кнопку - PullRequest
0 голосов
/ 18 мая 2018

Это блок кода, который я использую для проверки нажатия клавиш.Если я нажму клавишу «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: Хорошо, после некоторого дополнительного тестирования, проблема заключается в том, что слушатель прерывается при щелчке чего-либо в кадре.

  1. Запуск программ
  2. Слушатель активен и работает.
  3. При щелчке по любому компоненту кадра слушатель прерывается

Редактировать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();
        } 
    });

1 Ответ

0 голосов
/ 18 мая 2018

Я разобрался в проблеме.Слушатель перестал работать, потому что когда кнопка нажата, она становится сфокусированной.Я создал класс, расширяющий JButton, чтобы все мои кнопки имели одинаковое поведение, и добавил следующую строку кода к его конструкторам:

setRequestFocusEnabled(false);

Таким образом, после нажатия кнопки JFrame остается сфокусированным, позволяяСлушатель должен вести себя так, как задумано.

...