Я следую this руководству, чтобы получить привязку клавиш для работы в моем приложении. Пока что ключевые привязки срабатывают успешно, когда я нажимаю клавишу. То, что я ожидаю, это когда я привязываю одно действие к нажатому клавише событию и другому действию к событию, выпущенному ключом, он срабатывает первым действием при нажатии клавиши и вторым действием при отпускании ключа. То, что на самом деле происходит, когда я удерживаю клавишу, - это действия, вызываемые несколько раз. Что я могу сделать для достижения желаемого поведения?Ключи для ключей Несколько раз при удержании ключа
Вот как я реализации клавиш:
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("pressed UP"), "pressedUP");
component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released UP"), "releasedUP");
Action pressedUpAction = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Pressed UP");
}
};
Action releasedUpAction = new AbstractAction()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Released UP");
}
};
component.getActionMap().put("pressedUP", pressedUpAction);
component.getActionMap().put("releasedUP", releasedUpAction);
Когда я запускаю программу, выход я на самом деле получить, когда я держу вниз вверх ключ Pressed UP
, небольшая пауза, а затем кратно Pressed UP
значения. Когда я отпускаю ключ вверх, я получаю сообщение Released UP
. Весь результат выглядит следующим образом:
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Pressed UP
Released UP
действительно странно, если я заменю с ключом клавиатуры буквы, такие как P
, все работает, как я ожидаю, что это.
Действие уже _has_ a boolean, которое подходит для использования здесь: оно называется _enabled_ :-) – kleopatra
ahhhh, great m inds думает так, спасибо за урок – mKorbel
Извините, я спешил, когда я впервые набрал это. Я отправлю SSCCE прямо сейчас. – LandonSchropp