[英]Java Swing: setting variables inside actionlistener that were defined outside
我是使用swing的新手,我在使用动作听众时遇到了麻烦。 我有一个动作监听器设置为按下按钮时,当我尝试设置在监听器外定义的变量的值时,我收到一条错误消息。 这是代码
// create puzzle object and array for puzzle numbers
final Puzzle puzzle = new Puzzle();
final int[][] nums = new int[9][9];
// create buttons
JButton btnSolve = new JButton("Solve");
btnSolve.setEnabled(false);
JButton btnGenerate = new JButton("Generate");
// When generate button is clicked
btnGenerate.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// generate puzzle
nums = puzzle.generate();
// fill board with puzzle
fillBoard(nums);
// enable solve button
btnSolve.setEnabled(true);
}
});
// When solve button is clicked
btnSolve.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
// solve the puzzle
nums = puzzle.solve(nums);
// fill board with solved puzzle
fillBoard(nums);
}
});
如果我在btnGenerate监听器中声明nums和puzzle对象而不将它们作为final,则代码可以工作。 但是我想在btnSolve监听器中使用nums数组。
在线nums = puzzle.generate();
和nums = puzzle.solve(nums);
我收到错误:
无法分配最终的局部变量nums,因为它是在封闭类型中定义的
“以封闭式定义”是什么意思,应该如何做?
提前致谢。
声明这个final int[][] nums = new int[9][9];
作为集体成员而非final
成员。 消息很清楚。 你不能修改final
东西。 您可能也可能不需要对Puzzle进行同样的操作
public class MyClass {
int[][] nums = new int[9][9]; <-- class member instead of in constructor
Puzzle puzzle = new Puzzle();
public MyClass(){
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.