Wie kann ich bei Java eine gedrückte taste abfragen?

3 Antworten

Ich glaube, das eigentliche Problem in deinem Programm ist ein strukturelles, es liegt weniger an der Methode.

Folgendes: wenn du dein Programm so schreibst, wie du es vorgeschlagen hast, wird es in der Millisekunde, in der es bei dieser Codezeile angelangt bist, das abprüfen.

Im Normalfall braucht man jedoch etwas ganz anderes: Sobald (nicht wenn) eine bestimmte Taste gedrückt ist, soll etwas geschehen. Und dafür brauchst du keinen Test à la isDown() sondern einen KeyListener. (Es gibt anscheinend noch einen weiteren Spezialfall, für den findest du hier mehr: https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)

Den fügst du wie einen normalen Listener einer Component hinzu (im Normalfall nimmt man das Fenster und alles, was darin ist (einzeln!)), und wenn die Taste gedrückt ist, während diese Komponente angewählt ist, wird die actionPerformed()-Methode des Listeners aufgerufen.

Beispielcode zum Hinzufügen des Listeners:

JFrame meinFenster = new JFrame("toller Titel");
meinFenster.add(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {}

@Override
public void keyReleased(KeyEvent e) {}

@Override
public void keyTyped(KeyEvent e) {
// das, was bei Tastendruck passieren soll
}

});

So in etwa.

Du kannst ohne native Bibliotheken lediglich Tastendrücke in GUI-Komponenten abfragen.

Für globale Tastenanschläge kann ich die Bibliothek JNativeHook empfehlen. Ist auch sehr einfach zu benutzen.
https://github.com/kwhat/jnativehook