我有一个扩展JFrame的MainWindow类,是我应用程序中唯一的框架。我有几个JPanels来改变它的内容。我想通过MainWindow,所以我不需要制作它的全局副本。
这是问题所在。我在MainWindow中有一个假的JMenuBar,我用它来寻找屏幕。在他们的JMenuItem侦听器中,我无法将MainWindow作为此传递给JPanels。
有没有办法可以做到这一点,比如可能标记班级最后一次,或者我必须每次必须传入一个新的MainWindow。它没有携带任何数据,所以它并不重要,性能不是像这样的小型最终项目的主要关注点,但我想知道是否有更好的方法?
答案 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
对于您的案例,使用单例方法,您可以从项目的任何位置自由访问。