java局部变量“i”是在内部类修复中访问的吗?
我以前看过一些关于这个的帖子,但我还没有找到一个关于actionListeners的帖子。我正在尝试使用一系列JButton创建tic-tac-toe。如果可能的话,如何在使用for循环临时变量的同时向它们添加动作侦听器?提前谢谢你的帮助
JButton jb [] = new JButton[9];
int checkB [] = new int[9];
public SomethingSimple(){
JPanel p1 = new JPanel();
p1.setLayout(new GridLayout(3, 3, 5, 5));
p1.setBackground(Color.red);
for (int i = 0; i < jb.length; i++){
checkB[i] = 0;
}
for (int i = 0; i < jb.length; i++){
jb[i] = new JButton("");
p1.add(jb[i]);
jb[i].addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
jb[i].setText("O");
}
});
}
add(p1);
}
谢谢大家的帮助,你给了我一些解决方案
# 1 楼答案
局部类和匿名类只能访问
final
局部变量,所以执行以下操作在创建
new JButton
之后立即在for
循环内,然后可以在actionPerformed
内引用btn
# 2 楼答案
我认为最好的解决方案是将
ActionListener
转移到一个单独的类:然后像这样更改代码:
# 3 楼答案
在forloop中创建一个最终的int;无法从类访问匿名类中的局部变量
解决方案: