KeyListener无法正常工作

出于某种原因,我的KeyListener只是没有响应KeyPressed事件。

如果重要的话,我在Ubuntu 12.04上。 每按一次键就应该打印“按键”,但不是。

这是代码:

import java.awt.event.*; import javax.swing.*; import java.awt.Graphics; public class DisplayPanel extends JPanel { private Tile[][] tiles; private Creature[] creatures; private Dungeon dungeon; private Player player; public DisplayPanel(Dungeon dungeon, Tile[][] tiles, Creature[] creatures, Player player) { this.tiles = tiles; this.creatures = creatures; this.dungeon = dungeon; this.player = player; addKeyListener(new DungeonKeyListener()); requestFocus(); } protected void paintComponent(Graphics g) { int maximum = (getWidth() < getHeight()) ? getWidth() : getHeight(); for (Tile[] row : tiles) { for (Tile tile : row) { if (tile != null && tile instanceof Tile) { tile.draw(g, maximum/tiles.length, maximum/tiles[0].length); } } } for (Creature creature : creatures) { if (creature != null && creature instanceof Creature) { creature.draw(g, maximum/tiles.length, maximum/tiles[0].length); } } if (player != null && player instanceof Player) { player.draw(g, maximum/tiles.length, maximum/tiles[0].length); } } private class DungeonKeyListener extends KeyAdapter { public void keyReleased(KeyEvent e) { System.out.println("Key pressed!"); dungeon.press(e.getKeyCode()); repaint(); } } } 

  • 调用super.paintComponent (与您的问题无关,但稍后会解决一些问题)
  • 使组件“可聚焦” – Component#setFocusable
  • KeyListener使用键绑定
  • Component#requestFocusInWindow上使用Component#requestFocus

来自Java Docs

由于此方法的焦点行为取决于平台,因此强烈建议开发人员尽可能使用requestFocusInWindow