2d数组的动作监听器和JBut的2d数组有问题

时间:2014-03-08 21:19:13

标签: java arrays jbutton

我在使用Jbuttons获取actionListeners方面遇到了一些麻烦...所以我有3个文件 - 一个用于模型(信息存储),一个用于实际GUI,然后第三个用于交易对按钮的所有操作。在我的GUI中,我使用图标制作了一个8乘8的JButton阵列,每个都配备了一个selectedIcon。然后,在我的控制器类中,我为所有按钮设置动作侦听器。如何正确设置和使用它们用于JButtons的2D数组?我使用了一个双循环来制作网格..对于控制器类,这里是我现在拥有的动作监听器的代码:

for (i = 0; i < model.ROWS; i ++) {
  for (j = 0; j < model.ROWS; j ++) {

    buttonListeners[i][j] = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        view.buttonGrid[i][j].setSelected(!view.buttonGrid[i][j].isSelected());
      }
    };
  }
}
i = 0;
j = 0;
enableListeners();

它现在做的是当我点击任何按钮时,它只选择并取消选择第一个按钮...任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:0)

如果要在您创建的i中使用变量jActionListener,则变量必须为final或实例变量为封闭的班级。

目前,它们被明确地声明为实例变量。创建动作侦听器后,将其设置回i=0j=0。这就是为什么所有动作听众只会影响buttonGrid[0][0]

您可以为您的目的定义本地最终变量:

for (int i = 0; i < model.ROWS; i ++) 
{
    for (int j = 0; j < model.ROWS; j ++)
    {
        final int fi = i;
        final int fj = j;
        buttonListeners[i][j] = new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent e)
            {
                view.buttonGrid[fi][fj].setSelected(
                    !view.buttonGrid[fi][fj].isSelected());
            }
        };
    }
}

(并且不要提取以删除实例变量ij,您不应再需要它们了)