如何避免在Swing中耦合View和Controller

我最近遇到了一个试图在Swing中实现模型 – 视图 – 控制器的问题。

我有一个由子面板组成的GUI类,这些子面板由其他子面板组成。 现在,在其中一个子子面板中有一个JButton。 在这个JButton的ActionListener中,我想在控制器中调用一个方法。 为了做到这一点,我需要将控制器深入GUI的内部传递到JButton所在的子子面板。 然后在这个子子面板中,我需要将一个ActionListener附加到JButton,并通过调用我想在控制器中调用的方法来填充actionPerformed()。

我相信你们都看到了这个问题。 是否有任何好方法可以避免将控制器深入到GUI的内部。

我唯一的想法是让控制器成为一个单独的东西,将它与视图分离,但我听说单身人士通常是邪恶的。

关于这个问题的任何建议都将非常感激。 提前致谢!

而不是传入对控制器的引用,让控制器监听视图,如此处所示的间接关联所示。 添加PropertyChangeListener (如此处所示)是理想的选择。 当视图需要调用控制器时,它只是调用firePropertyChange()

更方便的方法是为控制器提供某些操作的单独视图,例如此处所示的reset()方法。