2012-03-24 2 views
3

Я следую 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, все работает, как я ожидаю, что это.

ответ

7
  • использование Boolean значение внутри Swing Action когда однажды раз выстрелил события затем изменить Boolean от false к true или наоборот

  • Я сожалею, что никто не знает, как же вы реализовали KeyBindings, опубликовать SSCCE

+2

Действие уже _has_ a boolean, которое подходит для использования здесь: оно называется _enabled_ :-) – kleopatra

+0

ahhhh, great m inds думает так, спасибо за урок – mKorbel

+0

Извините, я спешил, когда я впервые набрал это. Я отправлю SSCCE прямо сейчас. – LandonSchropp

Смежные вопросы