当我向Jpanel添加按钮时,KeyListener不起作用

我发现,当我写“pnlMap.add(map [i] [j])”时,keylistener将无效。 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工作,它注册的组件必须是可聚焦的并具有键盘焦点。 大多数容器(如JComponentJPanel默认情况下都不可聚焦(在考虑制作它们之前我会非常小心)。 这意味着,当您添加可接受键盘焦点的组件(并且它接收键盘焦点)时,您的KeyListener将不再起作用。

这是我们建议不要使用它的众多原因之一。 相反,请使用Key Bindings API,它允许您确定组件为触发绑定所需的焦点级别。

有关更多详细信息,请参见如何使用键绑定