Java - KeyListener 不起作用,但 ActionListener 起作用

标签 java swing keylistener

<分区>

当点击 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);
            }
        }
    });

最佳答案

这就是为什么在覆盖方法时应该始终使用 @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 注释,如果你输入错误,编译器会发现你正在尝试覆盖某些东西,但实际上并没有这样做 - 所以你得到一个编译时错误,而不仅仅是一个从未调用过的方法。

关于Java - KeyListener 不起作用,但 ActionListener 起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31801784/

相关文章:

java - 检测开/关按键 Android

java - 单击 JPanel 中的按钮后键盘控件停止工作?

java - 焦点组件引用

java - Spring 数据JPA : query ManyToMany

java - Java中如何共享类对象?

java - 向 jTree 节点添加新叶子

java - 单例与依赖注入(inject)

java - 如何在 Java Swing 中同步两个 View

java - Swing : Write in a JLabel

java - keyListener 中的数字格式异常