Java 访问JButton ActionListener中的变量

Java 访问JButton ActionListener中的变量,java,scope,jbutton,actionlistener,Java,Scope,Jbutton,Actionlistener,这似乎是一个非常简单的问题,但我很难想出如何处理它 示例场景: final int number = 0; JFrame frame = new JFrame(); frame.setVisible(true); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); frame.setSize(400, 400); final JTextArea text = new JTextArea();

这似乎是一个非常简单的问题,但我很难想出如何处理它

示例场景:

    final int number = 0;

    JFrame frame = new JFrame();
    frame.setVisible(true); 
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
    frame.setSize(400, 400); 

    final JTextArea text = new JTextArea();
    frame.add(text, BorderLayout.NORTH);

    JButton button = new JButton(number + ""); 
    button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent arg0) { 
        number++; // Error is on this line
        text.setText(number + "");
    }});
    frame.add(button, BorderLayout.SOUTH);
我真的不知道该去哪里。

若你们宣布数字为最终数字,你们就不能修改它的值。必须删除最终修改器

然后,您可以通过以下方式访问该变量:

public class Scenario {
    private int number;

    public Scenario() {
        JButton button = new JButton(number + "");
        button.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent arg0) { 
                Scenario.this.number++;
                text.setText(Scenario.this.number + "");
            }
        });
    }
}
表示法ClassName.this允许您访问所处类的对象

当您第一次使用number时,请保留一个提示,-new JButtonnumber-,您可以直接访问number,因为您在场景范围内。但是,当您在ActionListener中使用它时,您是在ActionListener范围内,而不是在场景范围内。这就是为什么您不能直接在操作侦听器中看到变量号,并且必须访问您所在场景的实例。这可以通过场景来完成。如果您将数字声明为final,则无法修改其值。必须删除最终修改器

然后,您可以通过以下方式访问该变量:

public class Scenario {
    private int number;

    public Scenario() {
        JButton button = new JButton(number + "");
        button.addActionListener(new ActionListener() { 
            public void actionPerformed(ActionEvent arg0) { 
                Scenario.this.number++;
                text.setText(Scenario.this.number + "");
            }
        });
    }
}
表示法ClassName.this允许您访问所处类的对象


当您第一次使用number时,请保留一个提示,-new JButtonnumber-,您可以直接访问number,因为您在场景范围内。但是,当您在ActionListener中使用它时,您是在ActionListener范围内,而不是在场景范围内。这就是为什么您不能直接在操作侦听器中看到变量号,并且必须访问您所在场景的实例。这可以通过场景来实现。最快的解决方案是将数字声明为静态,并使用类的名称引用它


或者,您可以创建一个实现ActionListener的类,并将数字和文本传递给它的构造函数。

最快的解决方案是将数字声明为静态,并使用类的名称引用它


或者,您可以创建一个实现ActionListener的类,并将数字和文本传递给它的构造函数。

ClassName.this?这到底是怎么回事?我怀疑这个号码是私人的还是必须保护的/公共的,谢谢;这很有道理。从来没想过这个。ClassName。这个?这到底是怎么回事?我怀疑这个号码是私人的还是必须保护的/公共的,谢谢;这很有道理。从未真正想过。请指定你需要做什么和不能做什么。请指定你需要做什么和不能做什么。