2016-12-27 5 views
1

Я пытаюсь выяснить, как заставить Scala Swing реагировать на несколько ключевых событий, которые происходят одновременно. Я знаю, как Swing может обнаружить один нажатый ключ, но, например, как он может определить, будут ли одновременно нажаты две клавиши? Примечание: Нет Java опытScala/Swing - реагирует на несколько ключевых событий, которые происходят одновременно

Я знаю, что первое событие не работает, но я стараюсь, чтобы представить, что я пытаюсь выполнить с ним:

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" 

     } 

Любые идеи, которые могли бы помочь? Или прямо ответьте, как это сделать?

+1

Возможный дубликат [Swing KeyListener и несколько нажатых клавиш на sa me time] (http://stackoverflow.com/questions/2623995/swings-keylistener-and-multiple-keys-pressed-at-the-same-time) –

ответ

0

Сделать буфер, который содержит все ключи, которые нажаты

var pressedKeys = Buffer[Key.Value]() 

При нажатии клавиши добавить ключ в буфер и проверить, если буфер содержит некоторые хотели ключевых значений

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" 

Очистить буфер при отпускании кнопки

  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*/ 
Смежные вопросы