2012-05-22 19 views
0

我有一个MainWindow类,它扩展了JFrame并且是我的应用程序中唯一的框架。我有几个JPanels来改变它的内容。我想通过MainWindow,所以我不需要制作它的全局副本。如何将“this”传递给动作监听器

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

有没有一种方法可以做到这一点,如可能标记类最终或每次必须通过一个新的MainWindow创建一个新的MainWindow。它没有包含任何数据,所以它并不重要,性能也不是这样一个小型最终项目的主要关注点,但我想知道是否有更好的方法?

+0

你大概有一个对您的程序中某处的MainWindow对象的引用。只需将它传递给任何需要它的类。 –

回答

5

您是否无法通过this因为它会引用监听器?如果是这样,你应该可以使用MainWindow.this

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

+1

参见[* 15.8.4。合格此*](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.4)。 – trashgod

+0

它的工作,谢谢。对听众的提及是确切的问题。我的意思是,MainWindow.this – eytanfb

0

创建MainWindow类作为Outer类,并将其扩展到JFrame,您已经做了,。现在,在主窗口类,只要你想创建许多内部类,让处理不同方式的ActionListener方法..

如:

MainWindow extends JFrame { 


    MainWindow(){ 



    } 

    class panel1 extends JPanel implements ActionListener{ 


    } 


    class panel2 extends JPanel implements ActionListener{ 


    } 




} 

您还可以实现Singleton模式,这样可以确保MainWidow只有一个实例。

0

这条老命方法:

  • MainWindow单。
  • 标记为final当您创建侦听器时,该方法中的变量。
  • 使用MainWindow.this

对于您的情况下使用单方式,与您可以从您的项目的任何地方自由地访问。

+0

1+推荐使用'MainWindow.this'。 1-建议使用一个绝对不需要的单身人士。所以净投票是0。 –