Swing如何与MVC相结合?

4

在使用Swing的MVC模式方面,网络上有很多示例。然而,似乎没有一种直接的方法来处理事情。

以下是一些问题:

  1. 可以将View的概念直接与Swing组件(例如JFrames)相关联吗?
  2. 同样,Swing使用的现有模型类可以用作Model,还是应该通过几个Swing模型类来适应一个基本模型?
  3. 如果问题2的答案是肯定的,这些Model类应该集中在一个类(属性/复合)中,还是分组在一个包中(每个单独的Model一个类)?
  4. 如果Model类保持分离,这是否意味着在典型应用程序中可以同时运行多个MVC模式?
  5. 一个模型,一个视图和一个控制器之间的一对一对应是必要的,还是可以为一个给定的模型存在多个控制器/视图?
  6. 最后,如何构建一个易于维护的应用程序结构?

一些链接:


如果您已经阅读了上面的链接,那么您到底对什么感到困惑?很明显,这不仅仅是一个普通的MVC/Java/Swing问题。 - James Black
混淆来自我看到的不同方法。从实际角度来看,大多数情况下,让我犹豫不决的是模型。理想情况下,模型应该采用Bean格式,而Swing的Model类是专门的(例如:JList->JListModel)。听起来这些类实际上是在视图中用于适应信息的。 - James P.
2个回答

4

像所有顶层容器一样,JFrame是一个很好的视图实现;我通常使用JPanel来组织构成相关视图元素的JComponent子类。

模型应该不知道视图;它通常在调用其方法的响应中通知观察者(监听器)状态的更改。

应用程序可以拥有多个模型,并且每个模型可以拥有多个视图。 Swing本身使用相关的可分离模型体系结构,如Swing架构概述所讨论的那样。

这里有一个非常简单的示例,您可能会发现有启发性。


2
这篇关于Java SE应用程序使用MVC的文章似乎回答了你的问题:http://www.oracle.com/technetwork/articles/javase/index-142890.html 更新: 模型应该与您想要存储数据的方式相匹配,不要强制使用某些通用模型来解决问题。例如,如果您有表格数据,您可能希望有一个视图将其显示为3D图形,另一个视图将其显示为电子表格。一个模型,多个视图。
基本思想是分离代码,以使其更灵活和易于维护。因此,我倾向于从我的数据开始考虑,所以我先设计模型,然后开始处理第一个视图,然后,当我处理每个模型的视图时,我可能发现需要添加到我的模型中,或者使它比我最初设想的更通用。 在这样做的同时,我必须处理控制器,并且根据复杂性,我可能会有几个控制器,而不是强制一个控制器做太多事情。
良好的设计在MVC中非常重要,因此确定哪些视图可以合理地由您的设计使用,以及确定您将需要哪些模型来处理数据。控制器只是将这两者联系起来。
但是,您会发现一些框架使用一个主控制器调用其他控制器,这很好,但是请找到一个在可适应性和可维护性方面有意义的设计。

好的,他们似乎推荐在Emilio的网站上描述的MVC(控制器作为中介者)。简要概括一下,模型扩展AbstractModel,控制器扩展AbstractController,并且从源代码中看来,视图正在使用JPanel。从主函数看来,似乎有一个控制器和几个模型/视图。那应该会有所帮助。谢谢 :)。 - James P.
1
+1 我之前忽略了这篇优秀的文章,将其与使用相同图表的旧文章混淆了:http://java.sun.com/blueprints/patterns/MVC-detailed.html - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接