Ключевые события Java на Mac

#java #macos #swing #osx-snow-leopard

#java #macos #качать #osx-snow-leopard

Вопрос:

Я пытаюсь написать программу, которая использует ключевые события для активации метода. Код работает на компьютерах с Windows, но при переносе на Mac он не реагирует на нажатие моей клавиши «Пробел». Я предполагаю, что это связано с различными используемыми кодами ключей.

 public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_SPACE) {
        System.out.println("SPACEBAR");
        grid.stepGame();

    }
}
 

Есть идеи, как я могу заставить это работать на Mac?

Редактировать — Проблема была решена с помощью приведенного ниже ответа — Для примечания, хотя кажется, что на Mac фрейм никогда автоматически не восстанавливает фокус, следовательно, почему keylistener не работает, активирован другой JComponent.

Ответ №1:

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

Примечание: Для определения специальных реакций на определенные клавиши используйте привязки клавиш вместо прослушивателя ключей.

В качестве примера

 // Component that you want listening to your key
JComponent component = ...;
component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0),
                        "actionMapKey");
component.getActionMap().put("actionMapKey",
                         someAction);