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