KeyListener di Swing e tasti multipli premuti allo stesso tempo

c’è un modo convenzionale di oscillare il tracciamento degli eventi, quando due tasti della tastiera vengono premuti contemporaneamente? Ho un paio di idee, ad esempio ricordando la chiave e il tempo di generazione degli eventi in modo che potremmo in una chiamata al gestore di eventi consecutivi controllare la differenza di tempo tra questi due eventi e decidere, che si tratti di un evento a due pulsanti o meno. Ma sembra un kludge.

Utilizzare una raccolta per ricordare quali tasti sono attualmente premuti e controllare se viene premuto più di un tasto ogni volta che si preme un tasto.

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 */ } } 

L’interfaccia KeyListener consente di rilevare i tasti premendo e rilasciando separatamente. Pertanto, è ansible mantenere un insieme di “tasti attivi”, cioè tasti che sono stati premuti ma non ancora rilasciati.