如何将“this”传递给动作侦听器

时间:2012-05-22 17:39:07

标签: java swing actionlistener

我有一个扩展JFrame的MainWindow类,是我应用程序中唯一的框架。我有几个JPanels来改变它的内容。我想通过MainWindow,所以我不需要制作它的全局副本。

这是问题所在。我在MainWindow中有一个假的JMenuBar,我用它来寻找屏幕。在他们的JMenuItem侦听器中,我无法将MainWindow作为此传递给JPanels。

有没有办法可以做到这一点,比如可能标记班级最后一次,或者我必须每次必须传入一个新的MainWindow。它没有携带任何数据,所以它并不重要,性能不是像这样的小型最终项目的主要关注点,但我想知道是否有更好的方法?

3 个答案:

答案 0 :(得分:5)

您是否无法传递this,因为它会引用侦听器?如果是这样,您应该可以使用MainWindow.this

或者在侦听器外部创建对this的引用,并将其作为参数传递。

答案 1 :(得分:0)

将MainWindow类创建为Outer类,并将其扩展为您已经完成的JFrame。现在在MainWindow类中,创建任意数量的内部类,并以不同的方式处理ActionListener方法。

例如:

  MainWindow extends JFrame {


    MainWindow(){



    }

    class panel1 extends JPanel implements ActionListener{


    }


    class panel2 extends JPanel implements ActionListener{


    }




}

您还可以实现Singleton Pattern,以确保只有一个MainWidow实例。

答案 2 :(得分:0)

尝试以下任何一种方法:

  • 制作MainWindow单身。
  • 在创建侦听器时,在方法中标记为final
  • 使用MainWindow.this

对于您的案例,使用单例方法,您可以从项目的任何位置自由访问。