-2

メイン関数にフラグを定義できますが、静的ではありませんか?これがメイン関数のコードです。別のクラス(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

やりたくないなら

static boolean flag=true

できるよ

boolean flag=true

ただし、メインでは、次を使用してアクセスする必要があります

mF.flag

これはあなたがやろうとしていることですか?質問は少し不明確です。あなたはそれを言い換えることができますか?

于 2012-10-18T02:09:28.340 に答える
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

それはすべて、フラグ変数をどのように使用するかによって異なります。コードサンプルでは、​​フラグがまったく使用されていませんでした。あなたのケースで静的変数の使用を避けたい理由はわかりませんが、それが重要なことですが、解決策の 1 つは、フラグ変数を 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 クラス内でそのフラグを使用する場合は、おそらく、インスタンスとして渡す JFrame タイプをパラメーターとして受け入れる新しいコンストラクターを Panel2 クラスに追加する必要があります...

  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 に答える