Swing KeyListener und mehrere Tasten gleichzeitig gedrückt

Gibt es einen konventionellen Weg, die Ereignisse zu verfolgen, wenn zwei Tastaturtasten gleichzeitig gedrückt werden? Ich habe ein paar Ideen, zB an die Schlüssel- und Ereignisgenerierungszeit, so dass wir in einem aufeinander folgenden Event-Handler-Aufruf den Zeitunterschied zwischen diesen beiden Ereignissen überprüfen und entscheiden können, ob es ein Zwei-Tasten-Event ist oder nicht. Aber es sieht wie ein Klotz aus.

Solutions Collecting From Web of "Swing KeyListener und mehrere Tasten gleichzeitig gedrückt"

Verwenden Sie eine Sammlung, um sich zu merken, welche Tasten gerade gedrückt werden, und prüfen Sie, ob bei jedem Drücken einer Taste mehr als eine Taste gedrückt wird.

class MultiKeyPressListener implements KeyListener { // Set of currently pressed keys private final Set pressed = new HashSet(); @Override public synchronized void keyPressed(KeyEvent e) { pressed.add(e.getKeyChar()); if (pressed.size() > 1) { // More than one key is currently pressed. // Iterate over pressed to get the keys. } } @Override public synchronized void keyReleased(KeyEvent e) { pressed.remove(e.getKeyChar()); } @Override public void keyTyped(KeyEvent e) {/* Not used */ } } 

Die KeyListener-Schnittstelle ermöglicht das separate Erkennen und Drücken von Tasten. Daher können Sie eine Reihe von “aktiven Tasten” beibehalten, dh Tasten, die gedrückt, aber noch nicht freigegeben wurden.