假设我有这个:
class external {
JFrame myFrame;
...
class internal implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
myFrame.setContentPane(this.createContentPane());
}
}
...
}
createContentPane
返回一个Container。现在,如果我在ActionListener
之外执行此代码,它将起作用,因为我可以访问它。但是,在里面,我没有。我可以访问myFrame
,这将是用方法的内容更新的内容,但这还不足以做我想要的事情,除非我能从中得到它。
我还需要来自其他实例变量的信息才能使用createContentPane()
,因此我不确定是否可以使用static
。
答案 0 :(得分:9)
你可以:
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());
}
}
...
}
答案 1 :(得分:2)
external.this
将允许您访问封闭类的实例,如果这是您想要的...
答案 2 :(得分:1)
不确定您到底得到了什么,但内部类可以访问其封闭类的所有成员。要访问封闭类的“this”指针(例如,传递给其他方法),请使用:
someMethod(External.this);
在您的示例中,您实际上使用“this”使其复杂化。以下是两个可行的选项:
myFrame.setContentPane(createContentPane());
或:
myFrame.setContentPane(External.this.createContentPane());
请注意,您已经以相同的方式访问myFrame。
答案 3 :(得分:0)
首先,您需要在外部类中扩展JFrame,如此
class External extends JFrame {
.....
.....
}