使用Swing实现Java SE MVC

我使用PropertyChageSupportPropertyChageListener为Swing实现了Java SE的MVC模式。 实现的MVC的图如下。

修改过的MVC模式

View的实现中,我在Controller的帮助下进行了Model属性更改。

View包含以下代码为Ok按钮。

 btnOk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { modelController.setNumber(Integer.parseInt(numberField .getText())); modelController.setName(nameField.getText()); } }); 

完整的代码可以在SwingMVC中找到。

现在,我的问题是, btnOkViewbtnOk编写上面的代码,或者我应该在Controller中的方法中编写它,以便在View ,我将会这样做

 btnOk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { modelController.btnOkActionPerformed(); } }); 

以上两个实现中,哪个是实现MVC的首选方式?

首先要注意的是:我不是专业人士或学生,而是一个嗜好的人,但话说回来,我自己的偏好是你的第二个例子,

 btnOk.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { modelController.btnOkActionPerformed(); } }); 

控件必须调用视图上的方法来提取信息,并且它将调用的任何方法都将是视图实现的接口的一部分。 我的目标是尽可能保持视野愚蠢,并做几乎任何事情以尽可能地松开耦合。

您的图表建议了一个模型 – 视图 – 演示者 (MVP)模式,它与Swing应用程序设计兼容。 在此上下文中, Action是一种方便的方法,用于封装从您的模型导出的应用程序function。 作为具体的例子:

  • DefaultEditorKitStyledEditorKit导出对文本组件通用的Document模型进行操作的有用Action类型。 如此示例所示,此类操作会更新Document ,间接更新相应的视图组件。

  • 此处引用的示例中的ControlPanel公开了许多Action实例,这些实例直接在ListList的隐式模型上运行。