0

我有一个扩展 JFrame 的 MainWindow 类,它是我的应用程序中唯一的框架。不过,我有几个 JPanel 可以更改其内容。我想传递 MainWindow,这样我就不必制作它的全局副本。

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

有没有办法可以做到这一点,比如可能将课程标记为最终课程,或者每次我必须通过一个时我必须创建一个新的 MainWindow。它不携带任何数据,因此它并不重要,性能也不是像这样的小型最终项目的主要关注点,但我想知道是否有更好的方法?

4

3 回答 3

5

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

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

于 2012-05-22T17:43:53.617 回答
0

创建 MainWindow 类作为 Outer 类,并将其扩展到您已经做过的 JFrame,。现在在 MainWindow 类中,根据需要创建尽可能多的内部类,并让 ActionListener 方法以不同的方式处理..

例如:

  MainWindow extends JFrame {


    MainWindow(){



    }

    class panel1 extends JPanel implements ActionListener{


    }


    class panel2 extends JPanel implements ActionListener{


    }




}

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

于 2012-05-22T17:48:04.697 回答
0

尝试以下任何一种方法:

  • MainWindow单例。
  • 创建侦听器时在方法中标记为final变量。
  • 采用MainWindow.this

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

于 2012-05-22T17:55:31.570 回答