我有一个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);
    }
  });
}

09-25 15:47