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

blu*_*lue 1 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);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

这就是为什么你应该总是@Override在重写方法时使用... KeyAdapter没有keyListener方法 - 它有keyPressed,keyReleased和keyTyped.例如,您可能需要:

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...
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

使用@Override注释,如果你输错,编译器会发现你试图覆盖某些东西,但实际上并没有这样做 - 所以你得到一个编译时错误,而不仅仅是一个永远不会被调用的方法.