我有一个2D的JButton数组
JButton[][] ledBtns = new JButton[8][8];
然后循环执行所有初始化工作。现在,我想向每个JButton添加一个EventListener,当单击Button os时将触发该事件。然后,我想更改按钮上的图像。
for(int i = 0; i < ledBtns.length; i++){
for(int j = 0; j < ledBtns[i].length; j++){
//init stuff
ledBtns[i][j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
changeImage();
}
});
}
}
现在将调用'changeImage()',但我需要知道调用它的按钮。
我不能使用参数,如果这样做会告诉我将它们声明为“ final”。
除了编写完全相同的64个方法并将它们手动添加到每个JButton中之外,还有其他方法吗?
最佳答案
最简单的方法是声明两个临时的final整数,然后引用它们。
for(int i = 0; i < ledBtns.length; i++){
for(int j = 0; j < ledBtns[i].length; j++){
//init stuff
final int finalI = i;
final int finalJ = j;
ledBtns[i][j].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
changeImage(finalI,finalJ);
}
});
}