2012-03-24 5 views
3

Ich folge this Anleitung, Schlüsselverbindung zu erhalten, um in meiner Anwendung zu arbeiten. Bisher feuern die Tastenbindungen erfolgreich, wenn ich eine Taste drücke. Was ich erwarte ist, wenn ich eine Aktion an ein gedrücktes Ereignis und eine andere Aktion an ein losgelassenes Ereignis anhefte, wird die erste Aktion ausgelöst, wenn die Taste gedrückt wird und die zweite Aktion, wenn die Taste losgelassen wird. Was passiert, wenn ich einen Schlüssel gedrückt halte, werden beide Aktionen mehrmals aufgerufen. Was kann ich tun, um mein gewünschtes Verhalten zu erreichen?Tastenkombinationen Feuer mehrfache Zeiten, wenn Schlüssel gehalten wird

Hier ist, wie ich die Tastenbelegungen bin Umsetzung:

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); 

Wenn ich das Programm ausführen, die Ausgabe ich eigentlich, wenn ich die Aufwärts-Taste gedrückt halte, ist Pressed UP, eine kleine Pause, und dann mehr Pressed UP Werte. Wenn ich den Schlüssel loslasse, bekomme ich eine Released UP Nachricht. Die gesamte Ausgabe sieht wie folgt aus:

Pressed UP 
Pressed UP 
Pressed UP 
Pressed UP 
Pressed UP 
Pressed UP 
Pressed UP 
Released UP 

Das wirklich seltsame Sache ist, wenn ich mit einer Tastatur Buchstabentaste ersetzen UP, wie P, alles funktioniert, wie ich es erwarte.

Antwort

7
  • Verwendung Boolean Wert innerhalb Swing Action wenn einmal mal Ereignisse dann Boolean von false zu true ändern gefeuert oder umgekehrt

  • Es tut mir leid niemand weiß, wie man KeyBindings implementiert haben, schreiben einen SSCCE

+2

eine Aktion bereits _has_ eine Boolean, die hier zu verwenden ist: es heißt _enabled_ :-) – kleopatra

+0

ahhhh, große m inds denkt gleich, danke für die Lektion – mKorbel

+0

Sorry, ich war in Eile, als ich das zum ersten Mal eingegeben habe. Ich werde jetzt ein SSCCE posten. – LandonSchropp

Verwandte Themen