10

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

是我,还是在 JTree 和使用 SwingWorker 中,控制器/视图/模型无法明确分离?
例如,我使用 Swingworker,但我无法在设计中“安装”控制器。

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

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

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

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

有人可以帮助我(并使我免于这种可怕的头痛),或者概述如何处理这种设计,或者至少提供一个有用的教程,并提供一个重要的例子?

谢谢

4

4 回答 4

7

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

于 2010-09-13T18:54:52.423 回答
5

Swing 并不是严格意义上的 MVC,正如以前称为 Sun 的公司公开承认的那样:

(传统的 MVC 分离)实际上效果不佳,因为组件的视图和控制器部分需要紧密耦合(例如,很难编写不了解视图细节的通用控制器) . 所以我们将这两个实体折叠成一个 UI(用户界面)对象。

对于 JTree,您可以使用 TreeModel 作为模型。一些像 JLabel 这样的简单组件甚至没有模型。

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

于 2010-09-13T18:46:32.517 回答
4

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

在我看到的几乎每个例子中,直到知道它是这样实现的,我看不出这与任何其他组件有什么不同,比如 jtree。

也许看看 MVC 和 MVP(我更喜欢)之间的区别更容易理解:MVC 或 MVP

于 2010-09-13T18:54:23.263 回答
1

不确定这是否会有所帮助,但请尝试 Swing 应用程序框架 (SAF) (JSR 296)。就我阅读或尝试这一点而言,它有助于将视图与事件处理分开。但是对于更复杂的示例(例如 JTree),我并没有那么详细

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

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

祝你好运!

于 2010-09-13T18:53:15.737 回答