【问题标题】:MVC with swing implementation java [closed]带有swing实现java的MVC [关闭]
【发布时间】:2013-07-08 21:18:38
【问题描述】:

我很困惑 MVC 如何与 GUI swing 应用程序一起工作。我使用过 PHP MVC,但那是完全不同的。我了解 MVC 代表什么。但是让我感到困惑的是在 GUI swing 编程中这样做的不同变体。很难从网络上的不同文章中得出特定的结论。谁应该知道谁?我的意思是模型视图和控制器之间的关系是什么?控制器应该知道模型和视图吗?如果可能的话,我想举一个简单的例子来说明这一点(比如会更新标签的简单按钮)

如果我不要求更多,我想获得关于编写 Swing 的 MVC 书的建议。

【问题讨论】:

  • 这是一个宽泛的问题,以前在这个网站上也有人问过类似的问题。你搜索过它们吗?
  • 是的,我几乎都看完了。但我迷路了。很难得出任何结论。不同的来源推荐了模型视图和控制器如何使用数据的不同方式。就像我正在阅读的某个地方一样,控制器将调解模型和视图。我在某处阅读视图可以看到模型并自行更新。我很困惑
  • 我想看一个简单的例子,它只是一个按钮和标签,它将保持正确的 MVC 模式。从一开始就掌握它会很有帮助。正如我已经说过的那样,我已经不知所措了。
  • 如果您拥有的只是“一个按钮和一个标签”而实际上并没有做任何有用的事情,那么您所拥有的只是一个视图,而您实际上并没有模型。您首先考虑 View 部分的事实表明您遇到了错误的问题。您应该知道您的模型是什么,然后为该模型创建一个视图。 MVC 部分只是保持模型与模型表示的适当分离。
  • 对于 Swing-MVC 相关的答案with code,请查看以下链接:Using a JFileChooser with Swing GUI classes and listeners:我创建的一个小型 Swing MVC 示例。 GUI not working after rewriting to MVC: 垃圾神的榜样,我怎么夸都不为过。你不应该阅读它,而应该学习它。 JAVA Swing MVC - Main Controller?

标签: java swing design-patterns model-view-controller


【解决方案1】:

如果你问 10 个不同的人“MVC 是什么意思?”你可能会得到 10 个不同的答案。我个人偏向 MVC 的这种定义(至少对于非 Web 应用程序而言):

Model-View-Controller Design Pattern

基本上,控制器的唯一功能是在应用程序启动时实例化模型和视图并将它们相互连接。其他一切只是将程序的数据和逻辑(模型)与您选择向用户显示它并允许用户交互(视图)的方式适当地解耦。

【讨论】:

    【解决方案2】:

    对于 Java 的 MVC 有许多不同的解释。我将尝试提供一个基本的解释,但正如我所说,其他人可能不同意这一点。

    对 MVC 的理论上“纯”解释涉及以下内容:

    • 模型不知道视图
    • 视图不知道模型
    • 控制器连接模型和视图的方式是,它将模型中的数据提供给视图,处理视图或模型中的“事件”,并根据视图中发生的情况相应地更新模型。它还可以只处理视图中的事件并将结果返回给视图,例如计算器。

    这是一个可能的/简单的例子:

    这个假设应用程序的目标是在模型中获取一个字符串,将其传送到 GUI(视图),允许用户更改字符串,并更新模型中的上述字符串值。这个例子或多或少是尽可能解耦的。

    型号:

    • 包含一个字符串变量

    查看:

    • 显示字符串变量。
    • 接受允许更改字符串的用户输入。

    控制器(“胶水”):

    • 通过自定义的 String 监听器监听 Model。
    • 将此字符串提供给视图以供用户查看
    • 通过自定义侦听器侦听视图,以便用户更改字符串。
    • 获取这个新字符串并将其提供给模型,更新原始字符串。

    MVC 背后的关键之一是观察者模式理论。

    虽然使用维基百科要承担一定的风险,但它通常可以很好地传达 MVC 背后的基础知识。 http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

    这里是讨论“纯”实现和解释来源的链接。 http://www.youtube.com/watch?v=ACOHAR7PIp4

    这里有一个链接,很好地解释了类似的 MVC 解释及其背后的理论: http://www.youtube.com/watch?v=CVxt79kK3Mk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 2011-12-06
      • 2020-07-24
      • 2011-06-10
      相关资源
      最近更新 更多