Tastatur abfragen

Konsole

Ein Java Applet oder eine Java Applikation soll nicht nur die Maus- sondern auch die Tastaturbetätigungen des Programmbenutzers abfragen können. Sie haben dazu ganz am Anfang eine Möglichkeit kennengelernt: Wenn eine Applikation nicht mit einem grafischen Fenster, sondern mit der Konsole arbeitet, kann man Methoden aus der Klasse Console verwenden.

 

Grafikfenster

Aber auch ein Applet oder eine grafische Applikation sollen die Tastatur abfragen können. Das geschieht analog wie bei den Mausbetätigungen über Events. Logischerweise heisst hier der Listener KeyListener und der Event KeyEvent. Der KeyListener kennt drei Methoden: Will man einfach wissen, welche Taste gedrückt wurde, verwendet man keyTyped(), denn sie wird ausgelöst, wenn eine Taste der Tastatur gedürckt und wieder losgelassen wird. Sie liefert das Zeichen zurück, welches der gedrückten Taste(nkombination) entspricht. Man kann aber auch das Hinunterdrücken abfangen (Methode keyPressed() ) und das wieder Loslassen (Methode keyReleased() ). Diese Methoden sind "lower level", sie liefern den Tastaturcode einer Taste. Man kann so z.B. testen ob eine Cursortaste oder die Tabulatortaste gedrückt wurden. Schauen wir uns beides an einem Beispiel an:

  • Erstellen Sie ein neues Projekt vom Typ "Basic Java Application" namens Keyboard.
  • Suchen Sie in KeyboardFrame den Kommentar "// Add window listener". So wie hier über den WindowListener abgefragt wird ob das Fenster geschlossen wird, wollen wir anschliessend mit folgendem Code abfragen ob eine Taste gedrückt wurde. Es wird noch ein kleiner Trick verwendet, indem an Stelle des Listeners ein Adapter instanziert wird, damit wir nicht alle Methoden aufschreiben müssen:

// Add key listener.
this.addKeyListener
(
  new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
      System.out.println("Key typed");
    }
  }
);

  • Ändern Sie jetzt die Methode keyTyped() ab und testen Sie mit Tasten mit Zeichen, Grossschrift, AltGr. Testen Sie auch Spezialtasten - die sollten nichts liefern, weil sie keinen Zeichen entsprechen:

char k = e.getKeyChar();
System.out.println("Zeichen der gedrueckten Taste(nkombination): "+k);

  • Jetzt wollen wir aber jede Taste abfragen können, also verwenden wir die Methode keyPressed(). Wenn Sie das wie nachfolgend abgeänderte Programm testen, sollten Sie für jede Taste eine Zahl erhalten:

public void keyPressed(KeyEvent e) {
  int k = e.getKeyCode();
  System.out.println("Code der gedrueckten Taste: "+k);
}

Es gibt noch eine kleine Annehmlichkeit: Die Tastencodes können Sie sich auch in einen Tastennamen übersetzen lassen:

int k = e.getKeyCode();
String s = e.getKeyText(k);
System.out.println("Name der gedrueckten Taste: "+s);

Ich denke, so sollten Sie nun Tastaturabfragen in Ihr Programm einbauen können, wobei Sie natürlich nicht einfach den Tastaturcode auf die Konsole schreiben...