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.
eine Aktion bereits _has_ eine Boolean, die hier zu verwenden ist: es heißt _enabled_ :-) – kleopatra
ahhhh, große m inds denkt gleich, danke für die Lektion – mKorbel
Sorry, ich war in Eile, als ich das zum ersten Mal eingegeben habe. Ich werde jetzt ein SSCCE posten. – LandonSchropp