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

时间:2015-07-16 01:19:13

标签: java swing 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]); 
        }
    }     
}

1 个答案:

答案 0 :(得分:2)

为了使KeyListener起作用,它注册的组件必须是可聚焦的并具有键盘焦点。大多数容器(如JComponentJPanel)默认情况下不可聚焦(在考虑制作之前我会非常小心)。这意味着,当您添加可接受键盘焦点的组件(并且它获得键盘焦点)时,您的KeyListener将不再有效。

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

有关详细信息,请参阅How to Use Key Bindings