我发现,当我写“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]);
}
}
}
答案 0 :(得分:2)
为了使KeyListener
起作用,它注册的组件必须是可聚焦的并具有键盘焦点。大多数容器(如JComponent
和JPanel
)默认情况下不可聚焦(在考虑制作之前我会非常小心)。这意味着,当您添加可接受键盘焦点的组件(并且它获得键盘焦点)时,您的KeyListener
将不再有效。
这是我们建议不要使用它的众多原因之一。相反,请使用Key Bindings API,它允许您确定组件为触发绑定所需的焦点级别
有关详细信息,请参阅How to Use Key Bindings