문제

내가 이것을 가지고 있다고 가정합니다.

class external {
    JFrame myFrame;
    ...

    class internal implements ActionListener {
        public void actionPerformed(ActionEvent e) {
             ...
             myFrame.setContentPane(this.createContentPane());
        }
    }
    ...
}

createContentPane 컨테이너를 반환합니다. 이제 내가이 코드를 수행하고 있다면 ActionListener 나는 이것에 액세스 할 수 있기 때문에 효과가있을 것입니다. 그러나 그 안에는 그렇지 않습니다. 나는 접근 할 수있다 myFrame, 이것은 방법의 내용으로 업데이트 될 것이지만, 이것을 얻을 수 없다면, 내가 원하는 것을 할 수는 없습니다.

또한 사용하려면 다른 인스턴스 변수의 정보가 필요합니다. createContentPane(), 그래서 나는 그것을 만들 수 있는지 확실하지 않습니다 static.

도움이 되었습니까?

해결책

당신은 둘 중 하나를 할 수 있습니다 :

myFrame.setContentPane(createContentPane());

또는

myFrame.setContentPane(external.this.createContentPane());

그건 그렇고, Java 클래스에서 첫 글자는 일반적으로 대문자입니다. 이름을 짓지 않으면 코드가 여전히 컴파일되고 실행되지만 코딩 규칙을 따르면 다른 사람 코드를 읽을 수 있으며 훨씬 더 중요한 다른 사람은 코드를 읽을 수 있습니다.

그래서 이것은 더 나은 스타일이 될 것입니다.

class External {
    JFrame myFrame;
    ...

        class Internal implements ActionListener {
            public void actionPerformed(ActionEvent e) {
                ...
                myFrame.setContentPane(createContentPane());
               //Or myFrame.setContentPane(External.this.createContentPane());
            }
        }
    ...
 }

Java 코드 규칙

다른 팁

external.this 그것이 당신이 원하는 것이라면, 둘러싸는 클래스의 인스턴스에 액세스 할 수 있습니다 ...

당신이 무엇을 얻고 있는지 정확히 모르겠지만 내면의 수업은 동봉 수업의 모든 구성원에게 액세스 할 수 있습니다. Enclosing 클래스의 "이"포인터에 액세스하려면 (예 : 다른 방법으로 전달하려면) 사용 :

someMethod(External.this);

당신의 예에서, 당신은 실제로 "this"를 사용하여 그것을 복잡하게하고 있습니다. 다음은 작동 할 두 가지 옵션입니다.

myFrame.setContentPane(createContentPane());

또는:

myFrame.setContentPane(External.this.createContentPane());

이미 같은 방식으로 MyFrame에 액세스하고 있습니다.

먼저 외부 클래스에서 이와 같이 JFrame을 확장해야합니다.

class External extends JFrame {
.....
.....
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top