尝试将JButton添加到“画布” JPanel中,然后按按钮并查看KeyListener发生了什么-
失败是因为JPanel失去了焦点。为了防止这种情况的发生,请改用“键绑定”(请参阅上面我的评论中的链接以获取本教程)。例如
import java.awt.event.*;import java.awt.*;import javax.swing.*;@SuppressWarnings("serial")public class Game2 { private static final String UP = "up"; public static void main(String[] args) { new Game2(); } public Game2() { Jframe window = new Jframe("Press up-arrow key"); window.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); JPanel canvas = new JPanel(); canvas.setPreferredSize(new Dimension(400, 300)); window.add(canvas); canvas.add(new JButton(new AbstractAction("Press space-bar") { public void actionPerformed(ActionEvent e) { System.out.println("Button or space-bar pressed"); } })); ActionMap actionMap = canvas.getActionMap(); int condition = JComponent.WHEN_IN_FOCUSED_WINDOW; InputMap inputMap = canvas.getInputMap(condition); inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), UP); actionMap.put(UP, new UpAction()); window.pack(); window.setLocationRelativeTo(null); window.setVisible(true); }}@SuppressWarnings("serial")class UpAction extends AbstractAction { @Override public void actionPerformed(ActionEvent arg0) { System.out.println("Up Arrow pressed!"); }}


