【问题标题】:Java - KeyListener does not work, but ActionListener does [closed]Java - KeyListener 不起作用,但 ActionListener 确实 [关闭]
【发布时间】:2015-08-04 06:05:03
【问题描述】:

当点击 MenuItem NewGame 时。可以,但是按F2就不行了

mntmNewGame.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            int n = JOptionPane.showConfirmDialog(contentPane,"Do you want to play new game ?", "Message!", JOptionPane.OK_CANCEL_OPTION);
        }
    });

    mntmNewGame.addKeyListener(new KeyAdapter() {
        public void keyListener(KeyEvent e) {
            if(e.getKeyCode()==KeyEvent.VK_F2)
            {
                int n = JOptionPane.showConfirmDialog(contentPane,"Do you want to play new game ?", "Message!", JOptionPane.OK_CANCEL_OPTION);
            }
        }
    });

【问题讨论】:

    标签: java swing keylistener


    【解决方案1】:

    这就是为什么在覆盖方法时应该始终使用@Override...KeyAdapter 没有keyListener 方法 - 它有keyPressedkeyReleasedkeyTyped。例如,您可能想要:

    mntmNewGame.addKeyListener(new KeyAdapter() {
        @Override public void keyTyped(KeyEvent e) {
            if(e.getKeyCode() == KeyEvent.VK_F2) {
                int n = JOptionPane.showConfirmDialog(
                    contentPane,
                    "Do you want to play new game ?",
                    "Message!",
                    JOptionPane.OK_CANCEL_OPTION);
                // Use n, presumably...
            }
        }
    });
    

    使用@Override 注释,如果您打错字,编译器会发现您正在尝试 覆盖某些内容,但实际上并没有这样做——因此您会收到编译时错误,而不仅仅是一个从未调用过的方法。

    【讨论】:

      【解决方案2】:

      我假设您正在使用 JMenuItem 的东西?在这种情况下你应该使用JMenuItem#setAccelerator(KeyStroke)

      mntmNewGame.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0));
      

      这将触发ActionListener

      详情请见How to Use Menus

      如果不是,那么您应该使用key bindings API 而不是KeyListenerKeyListener 只会在组件可聚焦且具有焦点时响应关键事件

      【讨论】:

        猜你喜欢
        • 2012-01-28
        • 1970-01-01
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多