Wie kann man Tastatureingaben abfragen?
Komponenten können bei der Betätigung einer Tastaturtaste KeyEvents erzeugen. Die Komponente muss bei einem KeyListener angemeldet sein, um das Ereignis "wahrzunehmen" zu können.
Java unterscheidet drei Varianten von KeyEvents:
  • keyTyped
  • keyPressed
  • keyReleased
Ein keyTyped-Ereignis wird beim Betätigen einer Taste nur ein Mal und nur bei Unicode-Zeichen gesandt. Es ist unabhängig von der Plattform und vom Tastatur-Layout und stellt die Standard-Methode zur Ermittlung eines eingegebenen Zeichens dar.
KeyPressed- und keyReleased-Ereignisse werden im wesentlichen zur Erfassung von Modifizierern (z.B. Strg, Ctrl, Alt, etc.) verwendet. Sie können kombiniert mit keyTyped-Ereignissen auftreten, z.B. beim Drücken von Strg + q o.ä. Genaueres hierzu findet sich in den Java Docs in der Beschreibung von KeyEvent.
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JFrame;
import javax.swing.JTextField;

public class KeyEventClass extends JFrame implements KeyListener {
    
    public KeyEventClass(){
        this.setLayout(new BorderLayout());
        JTextField field = new JTextField();
        field.addKeyListener(this);
        this.add(field, BorderLayout.CENTER);
        this.pack();
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setVisible(true);
    }

    public void keyTyped(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_UNDEFINED){
            System.out.println("Kein Unicode-Character gedr\u00FCckt!");
        }
    }

    public void keyPressed(KeyEvent e) {
        System.out.println("Tastenposition: " + e.getKeyLocation());
    }

    public void keyReleased(KeyEvent e) {
        if(e.getKeyCode() == KeyEvent.VK_SPACE){
            System.out.println("Programmabbruch!");
            System.exit(0);
        }    
        System.out.println("Taste: " + e.getKeyChar() + ", Code: " + e.getKeyCode());
    }
    
    public static void main(String[] args) {
        new KeyEventClass();
    }
}
Das Programmbeispiel definiert einen kleinen JFrame mit einem JTextField, bei dem ein KeyListener angemeldet wird. Die Methoden des Listeners zum Abfangen der drei Ereignisvarianten zeigen einige Möglichkeiten auf.
keyTyped() gibt aus, wenn eine Taste gedrückt wurde, die keinem Unicode-Character entspricht (z.B. Return). keyPressed() gibt den Ort der gedrückten Taste aus. Dies ist ein Integer-Wert, dessen Abfrage z.B. benutzt werden kann, um zu ermitteln, ob eine Zifferntaste von der Standard-Tastatur oder vom Nummernblock aus betätigt wurde. keyReleased() bricht das Programm bei Betätigen der Leertaste ab und gibt ansonsten das Zeichen selbst und den KeyCode aus. Dieser KeyCode ist für jede Taste als Integer-Wert in einer statischen Variablen der Klasse KeyEvent festgelegt. Beispiele hierfür finden sich in den if-Abfragen der Methoden keyReleased() und keyTyped().
letzte Änderung an:
switch-case-Verzweigung