假设我有这样的:

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会给你访问外围类的实例,如果这是你想要的...

不知道你在说什么,但一个内部类可以访问所有它包围类的成员。访问封闭类(例如,通过其它方法)的“this”指针使用:

someMethod(External.this);

在你的榜样,你实际上是通过使用“这个”复杂化了。这里有两个选择,将工作:

myFrame.setContentPane(createContentPane());

或:

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

请注意,你已经以同样的方式访问myFrame。

首先,你必须在你这样的外部类扩展的JFrame

class External extends JFrame {
.....
.....
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top