Keylistener没有响应numlock数字

时间:2014-05-13 12:09:16

标签: java swing keylistener key-bindings num-lock

我正在制作一个听取ctrl-1和ctrl-2的keylistener。

我正在为团队进行测验。如果他们想回答,第1组应该按ctrl-1。如果他们想回答,第2组应按ctrl-2。

我选择ctrl的原因是因为有2个控制键。因此,2支队伍可以在1个键盘上对战。

我希望团队1使用左控制和F1-F12下的数字。 并且团队2使用正确的控制和numlock上的数字。

我的代码注册了团队1的触发器,但没有注册团队2的触发器。 这是我的代码:

        public void keyPressed(KeyEvent e) {
            if((QuizController)getController() != null){
                if(e.getKeyCode () == KeyEvent.VK_1){
                    if((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)
                        System.out.println("Team 1");
                }
                if(e.getKeyCode () == KeyEvent.VK_2){
                    if((e.getModifiers() & KeyEvent.CTRL_MASK) != 0)
                        System.out.println("Team 2");
                }
            }

        }
编辑:我刚刚用键绑定做了,给出了同样的问题,这是代码。

AbstractAction team1 = new AbstractAction() {
        public void actionPerformed(ActionEvent arg0) {
            System.out.println("Team 1");

        }
    };

AbstractAction team2 = new AbstractAction() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
            System.out.println("Team 2");

        }
    };

    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_1, java.awt.event.InputEvent.CTRL_DOWN_MASK),"actionMap1");
    getActionMap().put("actionMap1", team1);

    getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_2, java.awt.event.InputEvent.CTRL_DOWN_MASK),"actionMap2");
    getActionMap().put("actionMap2", team2);

谢谢!

1 个答案:

答案 0 :(得分:2)

首先,我强烈建议您使用key bindings API

第二个KeyEvent.VK_1与为numpad + 1引发的事件不同,这是由KeyEvent.VK_NUMPAD1触发的,而是一个不同的键事件,就像函数键被引发一样{{1} } KeyEvent.VK_F1事件。

例如......

12