Die Verarbeitung von Tastatureingaben ist ein grundlegender Aspekt der Softwareentwicklung. In Java gibt es verschiedene Möglichkeiten, Tastatureingaben abzufragen und entsprechend zu handhaben. In diesem Artikel werden wir uns mit den verschiedenen Arten von KeyEvents in Java befassen und wie man diese abruft.
Die drei Arten von KeyEvents
Java unterscheidet drei Varianten von KeyEvents: KEY_PRESSED, KEY_RELEASED und KEY_TYPED. Diese werden durch statische int-Variablen in der Klasse KeyEvent repräsentiert. Wenn eine Tastaturtaste gedrückt wird, wird zuerst ein KEY_PRESSED-Event erzeugt. Beim Loslassen der Taste wird ein KEY_RELEASED-Event erzeugt. Wenn die gedrückte Taste einem Unicode-Zeichen entspricht, wird zusätzlich ein KEY_TYPED-Event generiert. Manchmal ist auch ein weiteres KEY_RELEASED-Event erforderlich. Der Zweck dieses Verhaltens besteht darin, dass bestimmte Eingaben die gleichzeitige Aktivierung mehrerer Tasten erfordern.
Die Identifizierung einer Taste
Um eine Taste genau zu identifizieren, wird im Hintergrund ein virtueller KeyCode erzeugt, der mit der Methode getKeyCode()
abgefragt werden kann. Auf diese Weise können beispielsweise die linke und die rechte Shift-Taste unterschieden werden.
Unterschiede zwischen Groß- und Kleinbuchstaben
Beim Drücken einer Taste wie ‘A’ wird für die A-Taste der KeyCode 65 gesendet. Wenn jedoch die Umschalt-Taste gleichzeitig gedrückt wird, wird der Großbuchstabe ‘A’ durch getKeyChar()
zurückgegeben. Daher ist die geeignete Methode zur Ermittlung eines eingegebenen Buchstabens getKeyChar()
in Verbindung mit dem KEY_TYPED-Event.
Verwendung der KeyEvents
Die KEY_PRESSED- und KEY_RELEASED-Ereignisse sind besonders nützlich, um Modifikatoren wie Shift, Strg, Ctrl, Alt usw. zu erfassen. Die KEY_TYPED-Ereignisse sind unabhängig von der Plattform und von der Tastaturlayout.
Ein Beispielprogramm
import java.awt.BorderLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class KeyEventClass implements KeyListener {
public KeyEventClass(){
init();
}
private void init() {
JTextField field = new JTextField();
field.addKeyListener(this);
JFrame frame = new JFrame("Key-Event");
frame.setLayout(new BorderLayout());
frame.add(field, BorderLayout.CENTER);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public void keyTyped(KeyEvent e) {
System.out.print("KeyTyped: ");
if(e.getKeyChar() == KeyEvent.CHAR_UNDEFINED){
System.out.println("Kein Unicode-Character gedrückt!");
}else{
System.out.println(e.getKeyChar() + " gedrückt!");
}
}
public void keyPressed(KeyEvent e) {
System.out.println("Taste: " + e.getKeyChar() + ", Code: " + e.getKeyCode());
System.out.println("Tastenposition: " + e.getKeyLocation());
}
public void keyReleased(KeyEvent e) {
System.out.print("KeyReleased: ");
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) {
SwingUtilities.invokeLater(() -> new KeyEventClass());
}
}
Das obige Beispiel zeigt einen kleinen JFrame mit einem JTextField, bei dem ein KeyListener angemeldet wird. Die Methoden des Listeners zum Abfangen der drei Ereignisvarianten zeigen das Verhalten bei der Tastatureingabe von Zeichen auf. Die Methode keyPressed()
gibt außerdem den Ort der gedrückten Taste aus, der zur Unterscheidung zwischen der Standard-Tastatur und dem Nummernblock verwendet werden kann.
Fazit
Die Verarbeitung von Tastatureingaben ist ein grundlegender Aspekt der Softwareentwicklung, insbesondere in Java. Durch das Verständnis der verschiedenen Arten von KeyEvents und ihrer Verwendung können Sie benutzerfreundliche und interaktive Anwendungen erstellen. Nutzen Sie diese Erkenntnisse, um Ihre Softwareentwicklungsfähigkeiten weiterzuentwickeln und noch bessere Anwendungen zu programmieren.