5

假设我有这个:

class external {
    JFrame myFrame;
    ...

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

createContentPane返回一个容器。现在,如果我在外部执行此代码,ActionListener它将起作用,因为我可以访问它。但是,在里面,我没有。我可以访问myFrame,这将使用方法的内容进行更新,但这还不足以做我想做的事情,除非我能从中得到这个。

我还需要来自其他实例变量的信息才能使用createContentPane(),所以我不确定我是否能做到static

4

4 回答 4

10

您可以:

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 代码约定

于 2009-02-24T02:33:48.890 回答
2

external.this将让您访问封闭类的实例,如果这是您想要的...

于 2009-02-24T02:32:13.153 回答
1

不确定您到底在做什么,但是内部类可以访问其封闭类的所有成员。要访问封闭类的“this”指针(例如,传递给其他方法),请使用:

someMethod(External.this);

在您的示例中,您实际上是通过使用“this”使其复杂化。以下是两个可行的选项:

myFrame.setContentPane(createContentPane());

或者:

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

请注意,您已经在以相同的方式访问 myFrame。

于 2009-02-24T02:32:04.777 回答
0

首先,您必须像这样在外部类中扩展 JFrame

class External extends JFrame {
.....
.....
}
于 2009-04-16T11:39:03.000 回答