这是Swing中MVC的正确实现吗?

时间:2013-01-29 16:55:07

标签: java swing model-view-controller

我已经阅读过关于MVC的内容,但我对如何使用Swing在Java中实现这个概念表示怀疑。这就是我想要的:

模特: ListOfThings包含CollectionThing个对象。

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

观点: 带有ListOfThingsPanel的Swing界面,其中包含ThingPanel个组件来表示模型。两者都延伸JPanelThingPanel包含用于显示与其关联的Thing数据的各种组件。 它还有一个按钮,可以在列表中添加一个新的(空的)东西。 点击事件会调用Controller的{​​{1}}方法,要求addThing()将新的ListOfThings添加到其列表中。 Thing有一个事件/侦听器系统,ListOfThings会监听它以了解它应该何时刷新视图。

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

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

对我来说有一点重要的是学会真正将模型与视图分开,以便最终创建各种类型的各种视图(例如,Swing但也可以控制台或更新到JavaFX)这就是为什么我喜欢避免在视图部件本身外部特定的Swing。

1 个答案:

答案 0 :(得分:2)

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

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

  • 使用POJO实现客户端业务逻辑
  • 根据需要使用自定义Swing模型包装POJO(ListModel,TableModel)
  • 使用GUI构建器设计GUI
  • 使用Mediator模式侦听事件(JPanel的自定义子类侦听其子节点的事件并更新其他子节点或在需要时触发自己的自定义事件)

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

修改

以下是Swing中解释MVC的文章:

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