KeyListener de Swing et plusieurs touches pressées en même temps
existe-t-il un moyen conventionnel de traquer les événements, lorsque deux touches de clavier sont pressées en même temps? J'ai quelques idées par exemple se souvenir du temps de génération de la clé et de l'événement pour que nous puissions dans une invocation de handler d'événement consécutive vérifier le décalage horaire entre ces deux événements et décider, s'il s'agit d'un événement à deux boutons ou non. Mais il ressemble à une bidouille.
2 réponses
Utiliser une collection de mémoriser les touches sont enfoncés et vérifier pour voir si plus d'une touche à chaque fois qu'une touche est enfoncée.
class MultiKeyPressListener implements KeyListener {
// Set of currently pressed keys
private final Set<Character> pressed = new HashSet<Character>();
@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'interface KeyListener permet de détecter les clés pressées et relâchées séparément. Par conséquent, vous pouvez maintenir un ensemble de "clés actives", c'est-à-dire des clés qui ont été pressées mais qui n'ont pas encore été relâchées.