Anzahl der gerade gedrückten Tasten

RungetSvohu

Bekanntes Mitglied
Hallo Leute,

für mein aktuelles Programm müsste ich abfragen können, wie viele Tasten gerade auf der Tastatur gedrückt sind. Dieser Ansatz funktioniert leider nicht:

Java:
		@Override
		public void keyPressed(KeyEvent key) {
			pressedKeys++;
			}
		}

		@Override
		public void keyReleased(KeyEvent arg0) {
			pressedKeys--;
		}

Grund ist, dass keyPressed immer wieder ausgelöst wird, wenn eine Taste unten bleibt.

Man könnte es jedoch so machen, dass man sich für jeden getKeyCode() individuell merkt, ob diese gerade unten ist oder nicht. Geht es noch leichter?
 
Einfacher nicht, aber es gibt einen leichten Weg indem man ein BitSet missbraucht:

Java:
   private BitSet bsKeys = new BitSet(256);

    public void keyPressed(KeyEvent e) {
        bsKeys.set(e.getKeyCode());
    }

    public void keyReleased(final KeyEvent event) {
        bsKeys.clear(e.getKeyCode());
    }

Die Anzahl der gleichzeitig gesetzten Bits (also gedrücken Tasten) bekommst Du dann über .cardinality() des BitSet heraus.

Bernd
 
PS2 oder USB? Das ganze passiert auf tiefster Hard bzw Softwareebene, und da hat man mit java in seiner vm immer probleme.
Bei PS2 kann man nicht fragen, Interrupt, die Tastatur meldet sich wenn was los ist.
USB benutzt pulling, aber das macht das OS/Mainboard für dich.

klappt es nicht, wenn du bei keypressed die taste die gedrückt wurde speicherst und die wieder aus dem set löscht wenn sie losgelassen wird?
 
Vorsicht, viele Tastaturen sind intern bzw. durch ihre Controller derart "verkabelt"/eingeschränkt, dass bestimmte Tastenkombinationen nicht eingegeben werden können. (Man sollte meinen, dass spezielle "Gamer-Tastaturen" dieses Problem nicht haben.) Außerdem gibt es wohl USB-Protokolle, die nur maximal 6 gleichzeitig gedrückte Tasten unterstützen; bei PS/2 soll es keine solche Einschränkung geben.

Einfach mal im Internet suchen: keyboard matrix limit HID USB PS/2

Hier wird das etwas erklärt, dort gibt es auch eine Testseite, wo man direkt im Browser testen kann, welche Kombinationen gehen und welche nicht.

Beispiel: Auf meiner Tastatur werden YXCV (deutsch/Deutschland-Tastatur) zusammen erkannt, XCVB und überhaupt viele andere Kombinationen mit B und eine der unteren Buchstaben nicht. FGB dagegen wird wieder erkannt …

Hier eine Erklärung mit Bildchen.

Ark
 
(Man sollte meinen, dass spezielle "Gamer-Tastaturen" dieses Problem nicht haben.)
manche mechanische PS/2 haben das Problem nicht
Außerdem gibt es wohl USB-Protokolle, die nur maximal 6 gleichzeitig gedrückte Tasten unterstützen;
immer nur 6, bei jedem USB
bei PS/2 soll es keine solche Einschränkung geben.
auch da ist es vom Layout auf der Tastatur abhängig, ob man Combos drücken kann. Allerdings hat PS2 definitiv kein Problem mit der Anzahl der Tasten, das ganze läuft CPU-nah über interrupts.

SteelSeries 6Gv2 mechanische Gaming Tastatur
n-key-rollover, allerdings geht Windows in die Knie und spackt rum, wenn man mit beiden Händen die ganze Tastatur drückt. 🙂

USB vs PS/2 PS/2 oder USB? Vorurteil oder Einbildung?
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben