0

我已经尝试了一段时间来访问我的主类中的一个变量:

public class Results extends JFrame {
     public static void main(String[] args) 
     {
        System.out.println(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(){
    private int doble;
    public void actionPerformed(ActionEvent ae){
                doble++;
                System.out.println("Doubles: " + doble);
                }
  });
}

我已经尝试了 5 种方法来做到这一点,但似乎不可能。有什么想法吗?

4

3 回答 3

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是一个非静态字段,因此您需要使用 Results 的具体实例来访问它。看看我对您的 main() 方法所做的更改。
  • 像这样直接访问私有字段并不表示封装非常干净,实际上会产生编译器警告。
  • 使用非字doble来避免保留字double上的编译器错误可能不如count这样更有意义的东西好

希望这可以帮助。

于 2013-01-17T16:06:39.997 回答
1

currentdoble是在您的构造函数中声明的局部变量,因此它的范围仅为confined to constructor,将其声明为在insatnce level其他地方访问它。

public class Results extends JFrame {
    private int doble;
      //cons code
   public static void main(String[] args) 
     {
        System.out.println(new Results().doble);
     }}
于 2013-01-17T16:01:31.713 回答
0

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

于 2013-01-17T16:01:37.380 回答