2012-10-04 37 views
-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); 
    } 
} 
+0

是的,你可以。只需在'main'方法內創建'MyFrame'的實例並從那裏繼續。 –

+0

他不是已經這樣做了嗎? – raam86

+0

這個問題還不清楚。 – raam86

回答

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

...但是,這不是真正的同樣的事情。

請注意,無論如何,實例和靜態變量通常應該是私有的 - 訪問它們應該基本上通過類中的方法。

如果你剛開始掌握面向對象,我會建議編寫控制檯應用程序來獲取東西;圖形用戶界面提出了他們自己的挑戰,並且從簡單的事情開始更容易。

0

這一切都取決於你將如何使用標誌變量,在你的代碼示例中,我沒有看到標誌的使用,我不明白爲什麼你寧願避免在你的情況下使用靜態變量,但如果這東西關鍵,解決方案之一是使用該標誌變量作爲MyFrame類的公共變量(無靜態變量),然後從你的main函數訪問到它:

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接受boolean變量中,當你在你的主要功能,您可以通過標記變量

0

如果你不想做

static boolean flag=true 

你可以做

boolean flag=true 

但隨後在你的主你需要使用訪問它

mF.flag 

這是你正在嘗試做什麼?這個問題有點不清楚。你能改述一下嗎?