2016-12-27 1 views
1

J'essaie de comprendre comment je peux faire réagir Scala Swing à plusieurs événements clés qui se produisent en même temps. Je sais comment Swing peut détecter une touche qui est pressée, mais par exemple comment peut-elle détecter si deux touches sont pressées en même temps? Note: Aucune Java expérienceScala/Swing - Répondre à plusieurs événements clés qui se produisent en même temps

Je sais que le premier événement ne fonctionne pas, mais je tente de représenter ce que je suis en train d'accomplir avec elle:

reactions += { 
      //case KeyPressed(_, Key.Space && Key.Up, _, _) 
       //label.text = "Space and Up are down" 
      case KeyPressed(_, Key.Space, _, _) => 
       label.text = "Space is down" 
      case KeyPressed(_, Key.Up, _, _) => 
       label.text = "Up is down" 

     } 

Toutes les idées qui pourraient aider? Ou directement réponses comment le faire?

+1

Copie possible de [KeyListener de Swing et plusieurs touches enfoncées à moi temps] (http://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time) –

Répondre

0

Faire un tampon qui contient toutes les touches qui sont pressées

var pressedKeys = Buffer[Key.Value]() 

Lorsque la touche est pressée ajouter la clé dans la mémoire tampon et vérifier si le tampon contient certains voulaient des valeurs clés

reactions += { 
      case KeyPressed(_, key, _, _) => 
       pressedKeys += key 
       if(pressedKeys contains Key.Space){ //Do if Space 
        label.text = "Space is down" 
        if(pressedKeys contains Key.Up) //Do if Space and Up 
        label.text = "Space and Up are down" 
       }else if(pressedKeys contains Key.Up)//Do if Up 
        label.text = "Up is down" 

Effacer le tampon lorsque le bouton est relâché

  case KeyReleased(_, key, _, _) => 
        pressedKeys = Buffer[Key.Value]() 
        /* I tried only to remove the last key with 
        * pressedKeys -= key, but ended up working 
        *badly, because in many occasions the program 
        *did not remove the key*/