Java:访问actionlistener中的变量

时间:2013-01-17 15:57:01

标签: java swing constructor actionlistener

我现在试着访问我的主类中的变量:

public class Results extends JFrame {
     public static void main(String[] args) 
     {
        System.out.println(doble);
     }}

位于actionlistener中,如此

public Results ()
{
 // Create a JPanel for the buttons DOUBLE AND NOT DOUBLE
    JPanel duplicate = new JPanel(
    new FlowLayout(FlowLayout.CENTER));
    JButton doblebutton = new JButton("DOUBLE");
    doblebutton.addActionListener(new ActionListener(){
    private int doble;
    public void actionPerformed(ActionEvent ae){
                doble++;
                System.out.println("Doubles: " + doble);
                }
  });
}

我尝试了5种方法,但似乎不可能。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

尝试在构造函数之外移动 doble 的声明,使其成为一个字段,如下所示:

public class Results extends JFrame {

    private int doble;

    public Results() {
        // Create a JPanel for the buttons DOUBLE AND NOT DOUBLE
        JPanel duplicate = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JButton doblebutton = new JButton("DOUBLE");
        doblebutton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                doble++;
                System.out.println("Doubles: " + doble);
            }
        });
    }

    public static void main(String[] args) {
        Results results = new Results();
        System.out.println(results.doble);
    }

}

一些意见:

  • 由于 doble 是非静态字段,因此您需要使用结果的具体实例来访问它。看看我对main()方法所做的更改。
  • 直接访问私有字段并不表示非常干净的封装,实际上会生成编译器警告。
  • 使用非单词 doble 来避免保留字 double 上的编译错误可能不如 count

希望这有帮助。

答案 1 :(得分:1)

目前doble是在构造函数中声明的局部变量,因此其范围仅为confined to constructor,在{{1}处声明它在其他地方访问它。

insatnce level

答案 2 :(得分:0)

main()是静态的,doble是实例变量。您必须实例化,或使变量静态。