중첩 된 Java ActionListener 내부에서 이것을 호출합니다
-
06-09-2019 - |
문제
내가 이것을 가지고 있다고 가정합니다.
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());
}
}
...
}
다른 팁
external.this
그것이 당신이 원하는 것이라면, 둘러싸는 클래스의 인스턴스에 액세스 할 수 있습니다 ...
당신이 무엇을 얻고 있는지 정확히 모르겠지만 내면의 수업은 동봉 수업의 모든 구성원에게 액세스 할 수 있습니다. Enclosing 클래스의 "이"포인터에 액세스하려면 (예 : 다른 방법으로 전달하려면) 사용 :
someMethod(External.this);
당신의 예에서, 당신은 실제로 "this"를 사용하여 그것을 복잡하게하고 있습니다. 다음은 작동 할 두 가지 옵션입니다.
myFrame.setContentPane(createContentPane());
또는:
myFrame.setContentPane(External.this.createContentPane());
이미 같은 방식으로 MyFrame에 액세스하고 있습니다.
먼저 외부 클래스에서 이와 같이 JFrame을 확장해야합니다.
class External extends JFrame {
.....
.....
}