-2

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

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);
    }
}
4

3 回答 3

0

这完全取决于您将如何使用标志变量,在您的代码示例中,我根本没有看到使用的标志,我不明白您为什么希望避免在您的情况下使用静态变量,但如果是这样的话一些至关重要的事情,解决方案之一是将标志变量用作 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 接受布尔变量,您可以在主函数中传递标志变量

于 2012-10-11T01:51:06.583 回答
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);
}

……但这不是一回事。

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

如果您刚刚开始掌握面向对象,我建议您编写控制台应用程序来掌握事情的窍门;GUI 提出了自己的挑战,从简单的东西开始会更容易。

于 2012-10-04T20:11:10.623 回答
0

如果你不想做

static boolean flag=true

你可以做

boolean flag=true

但是然后在您的主要内容中,您需要使用它来访问它

mF.flag

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

于 2012-10-18T02:09:28.340 回答