小编典典

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

java

我发现,当我编写“ 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]); 
        }
    }     
}

阅读 474

收藏
2020-10-16

共1个答案

小编典典

为了KeyListener工作,必须将其注册为可聚焦的组件并使其具有键盘焦点。默认情况下,大多数容器都喜欢JComponentJPanel无法将其聚焦(在考虑使它们成为容器之前,我会非常小心)。这意味着,一旦您添加了一个可以接受键盘焦点的组件(并且它可以接受键盘焦点),您的组件KeyListener就将不再起作用。

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

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

2020-10-16