模型可以刷新视图吗?

时间:2010-11-08 18:50:39

标签: java model-view-controller user-interface swt

我有一个使用SWT的MVCish设计。我有一个实现整个GUI(按钮和动作侦听器)的类,它有一个Shop对象,它有一个项目列表。有时候,使用RMI(学校作业),列表正在更新(如果杂志中有新内容告诉服务器,服务器将新列表传播到所有商店),这一切都很酷。问题是我不知道如何通过按下按钮使GUI重新绘制新列表。我想做的事:

1)杂志中有新内容
2)它将新列表发送到服务器
3)服务器将列表发送到所有商店
4)每个商店更新其清单
5)每个商店以某种方式告诉GUI重新绘制代表该列表的JTree。

我已经完成了第1-4点。是否可以实施5)?我故意试图将模型和控制器分开(因为我们必须创建一个终端和一个GUI界面),但现在我看到商店获得了新的列表并且它甚至不知道GUI的存在(只是像一个普通的MVC)。
现在我有一个“刷新”按钮,它从Shop对象中获取列表并更新JTree模型,但是从我老师告诉我他希望它是自动的。我可以通过在一个班级写商店和gui来做到这一点,但这有点糟糕。

2 个答案:

答案 0 :(得分:2)

您可以将视图设为模型的观察者,并以此方式获取通知。否则,您可以安排定期任务来执行刷新操作。

从UI的角度来看,我不希望视图自动更新 - 如果我正在深入研究某些东西并突然重置树,我会生气。我认为显示诸如“可用目录更新,按'刷新'以查看新项目”(有点像SO“新答案”消息)或者可能只是突出显示刷新按钮(更改其背景颜色或某些内容)这样的消息更为友好)。

答案 1 :(得分:1)

您正在寻找的是数据绑定。数据绑定是将模型和视图连接在一起的想法,以便更新的模型自动更新视图。

不幸的是,通过快速搜索,看起来似乎没有可用于JTree的数据绑定解决方案。我可能错了,但搜索让我相信你必须自己写一个。

一种简单的方法(尽管可能不是最佳解决方案)是在模型上引用JTree。然后,您可以告诉JTree在模型更改时以任何需要更改视图的方式刷新。