【问题标题】:Calling this from inside a nested Java ActionListener从嵌套的 Java ActionListener 内部调用它
【发布时间】:2010-10-09 11:26:11
【问题描述】:

假设我有这个:

class external {
    JFrame myFrame;
    ...

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

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

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

【问题讨论】:

    标签: java user-interface swing actionlistener


    【解决方案1】:

    你可以:

    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 Code conventions

    【讨论】:

    • 很高兴我找到了这个,正是我需要的(第 400 次)。我有点想调整问题和这个答案,而不是提到大写字母,因为它只是令人困惑且无关紧要......但我不会。谢谢+1
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      不确定您要了解的确切内容,但内部类可以访问其封闭类的所有成员。要访问封闭类的“this”指针(例如,传递给其他方法),请使用:

      someMethod(External.this);
      

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

      myFrame.setContentPane(createContentPane());
      

      或:

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

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

      【讨论】:

      • 啊,比我快 8 秒 ;-) +1
      【解决方案4】:

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

      class External extends JFrame {
      .....
      .....
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-19
        • 1970-01-01
        • 2015-10-21
        • 1970-01-01
        • 2011-08-01
        • 2011-12-08
        相关资源
        最近更新 更多