Java Scala/Swing—响应同时发生的多个关键事件

Java Scala/Swing—响应同时发生的多个关键事件,java,swing,scala,keyevent,Java,Swing,Scala,Keyevent,我试图弄清楚如何让Scala Swing对同时发生的多个关键事件做出反应。我知道Swing如何检测按下的一个键,但例如,它如何检测两个键是否同时按下?注意:没有Java经验 我知道第一个事件不起作用,但我试着用它来表达我正在努力实现的目标: reactions += { //case KeyPressed(_, Key.Space && Key.Up, _, _) //label.text = "Space and Up are d

我试图弄清楚如何让Scala Swing对同时发生的多个关键事件做出反应。我知道Swing如何检测按下的一个键,但例如,它如何检测两个键是否同时按下?注意:没有Java经验

我知道第一个事件不起作用,但我试着用它来表达我正在努力实现的目标:

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"

        }

有什么可能有用的想法吗?或者直接回答怎么做?

制作一个缓冲区,保存所有按下的键

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*/

制作一个缓冲区,保存所有按下的键

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*/
可能的重复可能的重复