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

And*_*rew 6 java model-view-controller swing actionlistener propertychangelistener

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

我有一个由子面板组成的GUI类,这些子面板由其他子面板组成.现在,在其中一个子子面板中有一个JButton.在ActionListenerfor for this中JButton我想调用控制器中的方法.为了做到这一点,我需要将控制器深入到GUI的内部,到达JButton所在的子子面板.因此,在本次的子面板,我需要一个连接ActionListenerJButton并填写actionPerformed()调用,我想在控制器中调用该方法.

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

我唯一的想法是让控制器成为一个单身人士将它从视图中分离出来,但我听说单身人士通常是邪恶的.

关于这个问题的任何建议都将非常感激.

tra*_*god 4

不要传递对控制器的引用,而是让控制器监听视图,如此处所示的间接关联所建议的那样。添加一个(此处PropertyChangeListener所示)是实现此目的的理想选择。当视图需要调用控制器时,它只需调用.firePropertyChange()

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