我发现,当我编写“ pnlMap.add(map [i] [j])”时,键侦听器将无法工作。map是JButton的集合,pnlMap是JPanel。
公共游戏(玩家播放器){
initComponents(); this.player = player; loadPlayerInfo(); ImageIcon icon = new ImageIcon("images/items/sword_advanced.png"); this.setIconImage(icon.getImage()); addKeyListener(this); map = new Square2[20][20]; for (int j = 0; j < 20; j++) { for (int i = 0; i < 20; i++) { map[i][j] = new Square2(); pnlMap.add(map[i][j]); } } }
为了KeyListener工作,必须将其注册为可聚焦的组件并使其具有键盘焦点。默认情况下,大多数容器都喜欢JComponent和JPanel无法将其聚焦(在考虑使它们成为容器之前,我会非常小心)。这意味着,一旦您添加了一个可以接受键盘焦点的组件(并且它可以接受键盘焦点),您的组件KeyListener就将不再起作用。
KeyListener
JComponent
JPanel
这是我们建议您不使用它的众多原因之一。相反,请使用Key Bindings API,该API可以让您确定组件触发触发绑定所需的焦点级别。
有关更多详细信息,请参见如何使用键绑定。