代码之家  ›  专栏  ›  技术社区  ›  Maksim Skurydzin

Swing的keyListener和同时按下的多个键

  •  12
  • Maksim Skurydzin  · 技术社区  · 16 年前

    当同时按下两个键盘键时,是否有任何常规的方法来跟踪事件? 我有一些想法,例如记住键和事件生成时间,这样我们就可以在连续的事件处理程序调用中检查这两个事件之间的时间差,并决定它是否是两个按钮的事件。但它看起来像一个蹩脚的拼凑。

    2 回复  |  直到 13 年前
        1
  •  16
  •   Ben S    16 年前

    使用集合可记住当前按下的键,并检查每次按下键时是否按下多个键。

    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 */ }
    }
    
        2
  •  2
  •   Eyal Schneider    16 年前

    KeyListener接口允许分别检测按键和释放。因此,您可以维护一组“活动键”,即已按下但尚未释放的键。