1 回答
![?](http://img1.sycdn.imooc.com/5458626a0001503602200220-100-100.jpg)
TA贡献1836条经验 获得超4个赞
只能从匿名类访问有效的最终变量。 i由循环修改,因此它实际上不是最终的。
解决方法如下所示:
for (int i = 0; i < n; i++) {
...
final int effectivelyFinal = i;
jButton[i].addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
...
// use effectivelyFinal instead of i
});
}
但是,正如其他人建议的那样,将匿名类提取到真实类中并使用构造函数传递所有必需的参数会更好。看起来可能像这样:
class MyListener implements ActionListener {
private final int index;
// add more fields for other required parameters
public MyListener(int index) {
this.index = index;
}
@Override
public void actionPerformed(ActionEvent e) {
// use index
}
}
用法:
jButton[i].addActionListener(new MyListener(i));
添加回答
举报