从嵌套的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
会给你访问外围类的实例,如果这是你想要的...
不知道你在说什么,但一个内部类可以访问所有它包围类的成员。访问封闭类(例如,通过其它方法)的“this”指针使用:
someMethod(External.this);
在你的榜样,你实际上是通过使用“这个”复杂化了。这里有两个选择,将工作:
myFrame.setContentPane(createContentPane());
或:
myFrame.setContentPane(External.this.createContentPane());
请注意,你已经以同样的方式访问myFrame。
首先,你必须在你这样的外部类扩展的JFrame
class External extends JFrame {
.....
.....
}
不隶属于 StackOverflow