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.

12
demandé sur Akhil Jain 2010-04-12 21:25:47

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 */ }
}
15
répondu Ben S 2010-04-12 17:53:24

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.

2
répondu Eyal Schneider 2010-04-12 17:48:20