【问题标题】:Java SE MVC implementation with Swing使用 Swing 实现 Java SE MVC
【发布时间】:2013-03-03 01:14:25
【问题描述】:

我已经使用 PropertyChageSupportPropertyChageListener 为带有 Swing 的 Java SE 实现了 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

现在,我的问题是,我是在View 中为btnOk 编写上面的代码还是应该在Controller 中的方法中编写它,以便在View 中,我'会做的

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

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

【问题讨论】:

    标签: java swing model-view-controller


    【解决方案1】:

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

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

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

    【讨论】:

    • 就个人而言,我会通过一系列接口来定义视图/控制器/模型之间的交互,但是,对我来说,这个概念是相同的+1
    • @MadProgrammer:是的,它的接口一直向下!
    • +1 同意; IIUC,Action,提到了here,就是这样一个接口。
    【解决方案2】:

    您的图表建议使用model–view–presenter (MVP) 模式,该模式与Swing application design 兼容。在这种情况下,Action 是一种封装应用程序功能以从您的模型中导出的便捷方式。具体例子:

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

    • here 引用示例中的ControlPanel 公开了许多Action 实例,这些实例直接在List<Node>List<Edge> 的隐式模型上运行。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2018-02-25
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多