我正在编写一个模板Java应用程序,不知何故,如果我想干净地遵循MVC模式,我不确定ActionListeners所属的位置.
示例是基于Swing的,但它不是关于框架,而是关于Java中MVC的基本概念,使用任何框架来创建GUI.
我开始使用一个包含JFrame和JButton的绝对简单的应用程序(用于处理框架因此关闭应用程序).该帖子的代码落后.没有什么特别的,只是为了澄清我们在说什么.我没有从模型开始,因为这个问题太烦人了.
已经存在多个类似的问题,例如:
带有许多ActionListeners Java的MVC模式
- ActionListener应该去哪里?
但是,他们之间的确非常令人满意,因为我想知道两件事:
我希望这不是太笼统或模糊,我在这里问,但这让我想了一会儿.我总是使用自己的方式,让ActionHandler了解Controller,但这似乎不对,所以我最终想知道这是如何正确完成的.
亲切的问候,
jaySon
控制器:
package controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import view.MainView;
public class MainController
{
MainView mainView = new MainView();
public MainController()
{
this.initViewActionListeners();
}
private void initViewActionListeners()
{
mainView.initButtons(new CloseListener());
}
public class CloseListener implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
mainView.dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
package view;
import java.awt.Dimension;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class …Run Code Online (Sandbox Code Playgroud) 我正在Swing中实现一个程序,我在Swing中阅读了Nirmal对这种模式的实现,这似乎表明了对整个"职责分离"概念的相当优雅的处理.
但是,由于我正在开发一个比Nirml发布的更复杂的程序,它由一个JFrame容器组成,我寻求指导如何正确实现MVC.
我的程序将由子容器等组成.我很好奇Controller应该如何实现定义和分配View的所有侦听器的逻辑?或者如果为每个View组件定义侦听器的控制器是否实用?
看来我在View的顶级容器中需要一个方法来允许Controller调用视图来向相关组件添加一个Listener?所以我需要一个方法链,每个方法都将侦听器从顶层容器传递到持有组件的直接容器.最后用容器调用addActionListener()就可以了.
这是在MVC中处理侦听器的正确方法吗?
是否在MVC中强制控制View中每个组件的所有侦听器,或者是一种有用的实践?这也意味着我在顶级容器(View)中创建方法,以便为Controller提供一种方法,将侦听器分配给子容器中的每个组件?