java swing vs mvc:这种模式确实可行吗?

时间:2010-09-13 18:01:04

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

我是新手,但设法创造了一个下降的gui 我的问题是我无法应用参考/教程中建议的模式,主要是MVC模式。

是我,还是在JTree中使用SwingWorker,是不是可以清楚地分离控制器/视图/型号?
例如,我使用Swingworker,但是我无法在设计中“适应”控制器。

即。控件的动作主要在doBackground方法中,例如在按钮的动作执行中 所以没有控制器类。

swing工作器中的操作结果是更新Jtree,所以我将结果传递给我命名为model的类,但是这个类必须能够访问JFrame内的Jtree的treeModel,即视图,所以没有明确的视图和模型分离。

我查看了很多教程,但是所有呈现MVC都有一个简单的例子,在大多数情况下,视图(只是一些标签!)更新了所有内容。我是否完全感到困惑,或者在使用摇摆工作者和jtree的swing应用程序中集成MVC模式是不可行的,或者至少是不容易的?

我说的是实际的域数据,而不是在swing组件中实现的MVC。

有人可以帮助我(让我摆脱这种可怕的头痛),或者概述一下如何处理这种设计,或者至少使用一个有用的教程,这是一个非常重要的例子吗?

由于

4 个答案:

答案 0 :(得分:7)

当我构建更大的应用程序(人员多年的开发)时,我们经常将MVC架构抽象到单个组件之上,并将其抽象为顶级控制器/模型和视图,并接受各个组件将成为他们自己的个性化MVC。 GeoffreyZheng在他的评估中是绝对正确的,这是我真正喜欢用Swing环境开发的东西。话虽这么说,如果你想要真正的MVC,你可能需要从单个组件中抽象出来,并用更抽象的术语来讨论一个视图。

答案 1 :(得分:5)

Swing不是严格意义上的MVC,因为该公司以前称为Sun openly admits it

  

(传统的MVC分离)没有   在实践中工作得很好,因为   一个视图和控制器部分   组件需要紧密耦合   (例如,很难   写一个没有的通用控制器   了解有关视图的细节)。所以我们   将这两个实体折叠成一个   单个UI(用户界面)对象。

对于JTree,你有TreeModel,你猜它是模型。像JLabel这样的一些简单组件甚至没有模型。

正如链接进一步解释的那样,您确实可以通过LAF提供的UI类获得一定程度的分离。但是,Swing组件本身必须维护和控制许多与UI相关的属性。

答案 2 :(得分:4)

在许多情况下,它仍然是可取的:当然,控制器需要了解负责该操作的组件,但视图仍然不需要任何特定的操作实现。您只是不在视图类中实现该操作,而是使用控制器(它知道视图和模型)。因此,在那里添加动作侦听器,例如,甚至在SwingWorker中更新一些模型细节。

在我看到的几乎所有例子中,直到知道它是这样实现的,我不知道这与任何其他组件的区别在哪里,例如jtree。

也许看看MVC和MVP(我更喜欢)之间的差异,它更容易理解:MVC or MVP

答案 3 :(得分:1)

不确定这是否有帮助,但请尝试使用Swing Application Framework(SAF)(JSR 296)。据我所知或尝试这一点,它有助于将视图与事件处理分开。但是我不是那么详细的例子(比如JTree)

http://java.sun.com/developer/technicalArticles/javase/swingappfr/

https://appframework.dev.java.net/

祝你好运!