我在使用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();
它现在做的是当我点击任何按钮时,它只选择并取消选择第一个按钮...任何帮助将不胜感激!!
答案 0 :(得分:0)
如果要在您创建的i
中使用变量j
和ActionListener
,则变量必须为final
或实例变量为封闭的班级。
目前,它们被明确地声明为实例变量。创建动作侦听器后,将其设置回i=0
和j=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());
}
};
}
}
(并且不要提取以删除实例变量i
和j
,您不应再需要它们了)