使用Swing实现Java SE MVC

时间:2013-03-03 01:14:25

标签: java swing model-view-controller

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

Modified MVC Pattern

View的实施中,我在Model的帮助下在Controller进行了财产更改。

View包含以下代码,如Ok按钮。

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

完整代码可在SwingMVC

中找到

现在,我的问题是,我是否在btnOk中为View编写了上述代码,或者我应该在Controller 中的方法中编写代码,以便在View,我会做的

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

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

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:4)

您的图表显示了model–view–presenter(MVP)模式,该模式与Swing application design兼容。在此上下文中,Action是封装应用程序功能以便从模型导出的便捷方式。具体的例子:

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

  • 引用示例here中的ControlPanel公开了一些直接在ActionList<Node>的隐式模型上运行的List<Edge>个实例