我可以在主函数中定义一个标志,但不能定义为静态标志吗? 这是我的主函数代码,我想在另一个类(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);
}
}
答案 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
这是你想要做的吗?问题有点不清楚。你能改一下吗?