我是新手,但设法创造了一个下降的gui 我的问题是我无法应用参考/教程中建议的模式,主要是MVC模式。
是我,还是在JTree中使用SwingWorker,是不是可以清楚地分离控制器/视图/型号?
例如,我使用Swingworker,但是我无法在设计中“适应”控制器。
即。控件的动作主要在doBackground方法中,例如在按钮的动作执行中 所以没有控制器类。
swing工作器中的操作结果是更新Jtree,所以我将结果传递给我命名为model的类,但是这个类必须能够访问JFrame内的Jtree的treeModel,即视图,所以没有明确的视图和模型分离。
我查看了很多教程,但是所有呈现MVC都有一个简单的例子,在大多数情况下,视图(只是一些标签!)更新了所有内容。我是否完全感到困惑,或者在使用摇摆工作者和jtree的swing应用程序中集成MVC模式是不可行的,或者至少是不容易的?
我说的是实际的域数据,而不是在swing组件中实现的MVC。
有人可以帮助我(让我摆脱这种可怕的头痛),或者概述一下如何处理这种设计,或者至少使用一个有用的教程,这是一个非常重要的例子吗?
由于
答案 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/
祝你好运!