2

我有一个程序,基本上就像这个 MVC 示例中的一样:http: //www.leepoint.net/notes-java/GUI/structure/40mvc.html

在我的程序中有一个过程需要相当多的时间来冻结我的 GUI。我希望 GUI 在进程运行时不断更新。为此,我相信我需要使用 SwingWorker。我不知道在我的 MVC 模式中我应该在哪里调用这个 SwingWorker。

我的想法是我应该在控制器的 MultiplyListener actionlistener 中运行它。这是正确的吗?

4

2 回答 2

3

在这种情况下,模型是一种随时间演变的数学运算,可能是通过迭代。显然,工人属于模型,如此处所示。该setProgress()方法将通知任何一个PropertyChangeListener,并且process()可以通知任何其他侦听视图,如此所示。

附录:在第二个示例中,worker 更新了一个不同的模型:图表的数据集名为collection. 反过来,图表会监听数据集并根据变化进行自我更新。

引用的示例中控制器代表模型视图安装动作侦听器。在这个相关示例中,GUI 操作侦听器位于其各自视图的本地。无论哪种情况,Action封装都是合适的选择。当模型的内部状态响应用户发起的操作而发生变化时,模型会通知其观察者。

于 2013-03-25T21:31:25.847 回答
1

我认为你SwingWorker属于控制,我会告诉你为什么。我觉得模型应该尽可能地与视图无关,并且应该在创建时考虑到它可以与不同的视图和控件一起使用,如果需要的话,甚至可以与完全不同的 GUI 库一起使用。例如,您当前希望在 Swing GUI 中使用模型,但如果稍后您想在 Android 应用程序中使用它怎么办?为了允许使用尽可能少的修改,大多数 Swing 特定的代码,例如 aSwingWorker应该驻留在ControlView中。

例如,请查看此答案

于 2013-03-31T16:09:37.253 回答