2

我已经使用PropertyChageSupport和使用 Swing 为 Java SE 实现了 MVC 模式PropertyChageListener。实现 MVC 的示意图如下。

修改后的 MVC 模式

在 的实施中View,我ModelController.

View包含类似 Ok 按钮的代码。

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

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

现在,我的问题是,我是为in编写上面的代码还是应该在一个方法中编写它,btnOkViewController以便 in View,我会做

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

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

4

2 回答 2

4

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

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

  • 此处ControlPanel引用的示例中的公开了许多直接在和的隐式模型上操作的实例。ActionList<Node>List<Edge>

于 2013-03-03T02:46:22.073 回答
4

首先需要注意的是:我不是专业人士或学生,而是最喜欢的人,但话虽如此,我自己的偏好是你的第二个例子,

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

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

于 2013-03-03T01:20:31.057 回答