主要功能内的标志

时间:2012-10-04 20:07:38

标签: java

我可以在主函数中定义一个标志,但不能定义为静态标志吗? 这是我的主函数代码,我想在另一个类(Panel2类)中使用Flag

public class MyFrame extends JFrame 
{
    private Panel1 P1 = new Panel1();
    private Panel2 P2 = new Panel2();

    public static boolean flag = true;

    public MyFrame()
    {
        super("MyFrame");
        setLayout(new BorderLayout());
        add(P1,BorderLayout.CENTER);
        add(P2,BorderLayout.EAST);
        setSize(500,400);
        setVisible(true);
    }

    public static void main(String[] args) 
    {
        MyFrame mF=new MyFrame();
        mF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

3 个答案:

答案 0 :(得分:0)

如果你的意思是一个局部变量,那么不 - 你不能在一个方法中声明一个局部变量,然后在另一个方法中使用它,即使在同一个类中也是如此。就它所声明的方法而言,它只是“存在”。您可以将局部变量的值传递给在声明方法中调用的方法或构造函数,当然:

public static void main(String[] args) {
    int someValue = 10;
    myMethod(someValue);
}

private static void myMethod(int parameter) {
    System.out.println("I was passed " + parameter);
}

......但那不是一回事。

请注意,实例和静态变量通常应该是私有的 - 访问它们应该基本上通过类中的方法。

如果您刚刚开始掌握面向对象的问题,我建议您编写 console 应用程序来解决问题。 GUI提出了自己的挑战,从简单的事情开始就更容易了。

答案 1 :(得分:0)

这完全取决于你将如何使用flag变量,在你的代码示例中我根本没有看到使用的标志,我不明白为什么你更愿意避免在你的情况下使用静态变量,但是如果这是至关重要的,那么解决方案之一就是将标志变量用作MyFrame类的公共变量(无静态变量),然后从主函数访问它:

public class MyFrame extends JFrame 
{
private Panel1 ;
private Panel2 ;       
public  boolean flag;

    public MyFrame()
    {
        super("MyFrame");
        this.flag = true;
        P1 = new Panel1();
        P2 = new Panel2();
        setLayout(new BorderLayout());
        add(P1,BorderLayout.CENTER);
        add(P2,BorderLayout.EAST);
        setSize(500,400);
        setVisible(true);

    }

    public static void main(String[] args) {
     MyFrame mF=new MyFrame();

     // you can access your flag this way 
     mF.flag = false; // or use it the way you want !
     mF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

    }

但是如果你想在Panel2类中使用那个标志,那么你可能需要在Panel2类中添加一个新的构造函数,它接受JFrame类型作为参数,你将它作为实例传递给它...

  public class MyFrame extends JFrame 
    {
    private Panel1 ;
    private Panel2 ;       
    public  boolean flag;

        public MyFrame()
        {
            super("MyFrame");
            P1 = new Panel1();
            this.flag = true;
            P2 = new Panel2(this); /* then you will be able to have a visibility 
    on the flag variable of your MyFrame instance.*/

            setLayout(new BorderLayout());
            add(P1,BorderLayout.CENTER);
            add(P2,BorderLayout.EAST);
            setSize(500,400);
            setVisible(true);

        }

        public static void main(String[] args) {
         MyFrame mF=new MyFrame();

         // you can access your flag this way 
         mF.flag = false; // or use it the way you want !
         mF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

        }

您还可以向Panel2添加接受布尔变量的函数,您可以在主函数中传递标志变量

答案 2 :(得分:0)

如果你不想做

static boolean flag=true

你可以做到

boolean flag=true

但是在你的主要内容中你需要使用

访问它
mF.flag

这是你想要做的吗?问题有点不清楚。你能改一下吗?