繁体   English   中英

Java Swing:在actionlistener中设置外部定义的变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM