2016-12-27 82 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按下的多个按键我的时间](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*/