簡體   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