それはすべて、フラグ変数をどのように使用するかによって異なります。コードサンプルでは、フラグがまったく使用されていませんでした。あなたのケースで静的変数の使用を避けたい理由はわかりませんが、それが重要なことですが、解決策の 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 に追加することもできます