Java - Swing - MVC/观察者模式 - 如何构造这两个类以遵守 MVC 模式?

标签 java swing user-interface model-view-controller observer-pattern

我目前正在为大学开展一个更大的项目,其中我(我们)创建了一款小型大学大亨类型的游戏。我目前正在研究 GUI 方面的工作,并且在构建代码时遇到了问题。

此时我有 3 个类,它们是 gui 的一小部分提取:

  1. CreateGamePanel.java
  2. TabbedPanePanel.java
  3. UniversityView.java

其中 UniversityView 与 University.java 和 UniversityController.java 一起属于 MVC 模式。我们必须使用 MVC/观察者模式的这种晦涩的组合。但让我们从头开始:

CreateGamePanel 是一个 JPanel,它使我可以创建新游戏并输入一些数据。然后它将创建实际的大学实例。重要的部分是:

    }else if (e.getSource() == btnCreate){
        IConfig config = new Config(1);

        IUniversity university = new University(txtFldPlayerName.getText(),  txtFldUniversityName.getText(), config, getSelectedButtonDifficulty());
        UniversityView universityView = new UniversityView();
        UniversityController universityController = new UniversityController(university, universityView);

        TabbedPanePanel mainPanePanel = new TabbedPanePanel(universityView,universityController);

        frame.getContentPane().removeAll();
        frame.setContentPane(mainPanePanel);
        frame.validate();
        frame.repaint();
    }

完整来源:http://pastebin.com/8rYBuyzN

正如您所看到的,它将面板从我的框架切换到下一个框架。 TabbedPanePanel。此时这将充当主面板。 GUI 方面的所有内容都将集中在这个 TabbedPane 中。

它的源代码相当小:http://pastebin.com/MfDALzvF

UniversityView 源代码:http://pastebin.com/VP3rYXq2

现在我想创建大学的概述。这应该显示诸如大学名称、玩家名称、年份等内容。我有方法从 UniversityController 中的模型获取这些信息。但问题是我的 UniversityView 需要知道对 UniversityController 的引用。但根据 MVC 模式,情况不应该是这样。

此外,根据我们的规范,UniversityView 充当大学模型的观察者。

这一切让我很困惑。那么我该如何整理这个困惑的局面呢?

最佳答案

我不确定要具体解决什么问题,但回顾一下您所说的一些事情:

obscure comination of MVC/Observer pattern

MVC 模式通常使用观察者和事件进行编码,特别是当许多操作可能是异步的或一个操作可能需要很长时间(例如通过网络连接进行查询)时。在 Swing 中这样做是有意义的,以免耽误 EDT。

But the issue is that my UniversityView then needs to know the reference to UniversityController

听起来您的 View 类不需要知道对 Controller 的引用。您的 Controller 可以了解 View ,然后在需要时为 View 提供您所描述的这所大学概述的更新数据集。

没有确切的方法来编写 MVC。此类模式的目的是为了通信,如果您可以以某种正确的方式编码您的程序,并且可以使用术语 MVC 轻松地向其他人描述它,那么您可以说您已经使用了 MVC。您只应使用一种特定方法在模型、 View 和 Controller 之间传递信息,并且您发现这种方法非常适合您的应用程序。

关于Java - Swing - MVC/观察者模式 - 如何构造这两个类以遵守 MVC 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23696308/

相关文章:

java - 处置不工作

java - 如何从 jar 文件中排除属性文件?

java - 如果参数化,按需初始化持有者习惯用法仍然安全吗?

java - 如何设置图标没有间隙?

java - TableColumnExt 不尊重原型(prototype)值

c++ - Qt 警告:传递 qreal 进行转换 QRect::QRect(int, int, int, int)

java - java 数组和 Action 监听器

xcode - 单击 xcode/Swift UI 时如何更改导航链接的不透明度

Java8 Stream循环迭代

java - Spring 启动 mongoDB jar