0

我已经阅读了有关 MVC 的信息,但对如何使用 Swing 在 Java 中实现该概念存有疑问。这就是我想要的:

模型: ListOfThings包含一个Collection对象Thing

控制器: Controller实例化ListOfThings并使用“添加”方法填充它(在内部创建一个新的Thing并将其添加到Collection

视图:一个 Swing 接口,ListOfThingsPanel其中包含ThingPanel表示模型的组件。两者都扩展JPanelThingPanel包含各种组件,用于显示Thing它所链接的数据。它还有一个按钮,可以在列表中添加一个新的(空的)东西。click 事件调用Controller'saddThing()方法,该方法要求在其列表ListOfThings中添加一个新的。有一个事件/侦听器系统并侦听它以了解何时应该刷新视图。ThingListOfThingsListOfThingsPanel

我这样做是否正确地遵循了 MVC 概念?

更新: 我仍在学习 Java,但我有编码经验,并且更愿意学习理论并在使用预制框架之前以自己的方式尝试它。虽然我知道 Swing 实现了 MVC 模式,但我已经阅读了它以特定方式(视图和控制器相结合)实现它,这可能不是最好的,并且不适用于其他情况。在我确定“Swing MVC”与“MVC”没有区别之前,我有点谨慎,或者这些差异不会影响我对基本思想的理解。

对我来说重要的一件事是学习真正将模型与视图分开,以允许我最终创建各种类型的各种视图(例如 Swing 以及控制台或更新到 JavaFX)这就是为什么我想避免任何事情在视图部分本身之外摆动特定。

4

1 回答 1

2

虽然 Swing 框架已经实现了一种形式的 MVC(显式模型;JXyz 和 UI 类 = 控制器和视图),但这种严格的分离很少用于应用程序级别,而且看起来很奇怪。

首先,我建议遵循以下设计:

  • 使用 POJO 实现客户端业务逻辑
  • 在需要时使用自定义 Swing 模型(ListModel、TableModel)包装 POJO
  • 使用 GUI builder 设计 GUI
  • 使用 Mediator 模式来监听事件(JPanel 的一个自定义子类监听其子级的事件并更新其他子级或在需要时触发自己的自定义事件)

如果您想更进一步,请使用诸如 NetBeans 平台之类的 RCP(非常推荐)。

编辑:

这是在 Swing 中解释 MVC 的文章:

http://www.oracle.com/technetwork/java/architecture-142923.html

于 2013-01-29T17:19:57.243 回答