2012-10-04 4 views
-2

내 기능에 플래그를 정의 할 수 있습니까? 로컬 변수를 선언 할 수 없습니다 - (Panel2 클래스)A 주요 기능 내 플래그

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

을 ...하지만 그건 정말 같은 일이 아니다 : 당신은 물론, 선언 방법 내에서 호출하는 방법 또는 생성자로 지역 변수의 값을 전달할 수 있습니다.

인스턴스 변수와 정적 변수는 일반적으로 private이어야합니다. 클래스에 액세스하려면 기본적으로 클래스의 메서드를 사용해야합니다.

방금 ​​객체 지향으로 그립을 잡기 시작했다면, 콘솔 앱을 작성하여 잠깐 기다려주세요. GUI는 자체적 인 과제를 제시하며, 단순한 것으로 시작하는 것이 더 쉽습니다.

0

모두가 플래그 변수를 사용하는 방법에 따라 달라집니다. 코드 샘플에서 전혀 플래그가 사용되지 않는 것을 보았습니다. 왜 그런 경우에 정적 변수를 사용하지 않으려는지 모르겠지만, 그 중요한 일이있는 경우 그러나, 해결책 중 하나가 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 클래스에 새 생성자를 추가해야 할 것입니다 ...

,210
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에 기능을 추가 할 수 있습니다

0

당신은하지 않으려면

static boolean flag=true 

당신은

boolean flag=true 

하지만 다음 주에 당신이 사용하여 액세스해야하는 거라고 할 수 있습니다

mF.flag 

당신이하려는 일이 이것입니까? 질문은 약간 불분명하다. 그것을 바꿔 말할 수 있습니까?

관련 문제