代码之家  ›  专栏  ›  技术社区  ›  Mateusz Dymczyk

模型可以刷新视图吗?

  •  1
  • Mateusz Dymczyk  · 技术社区  · 15 年前

    我有个使用SWT的人。我有一个实现整个GUI(按钮和动作监听器)的类,它有一个Shop对象,它有一个项目列表。不时地,使用rmi(学校分配)更新列表(如果杂志中有新内容,它会告诉服务器,服务器会将新列表传播到所有商店),这一切都很酷。问题是我不知道如何通过按一个按钮让GUI重新绘制新列表。我想做的是:

    1)杂志上有新东西
    2)向服务器发送新列表
    3)服务器将列表发送到所有商店
    4)各店更新清单
    5)每个商店不知怎么地告诉GUI重新绘制代表列表的jtree。

    我已经完成了1-4分。是否可以执行5?我特意尝试将模型和控制器分开(因为我们必须制作一个终端和一个图形用户界面),但现在我看到商店得到了新的列表,它甚至不知道图形用户界面的存在(就像一个普通的MVC)。
    现在我有了一个“刷新”按钮,它从Shop对象获取列表并更新jtree模型,但是根据我的老师告诉我的,他希望它是自动的。我可以在一节课上同时写商店和图形用户界面,但这有点糟糕。

    2 回复  |  直到 15 年前
        1
  •  2
  •   TMN    15 年前

    您可以使视图成为模型的观察者,并以这种方式获取通知。或者您可以安排一个定期任务来执行刷新操作。

    从用户界面的角度来看,我不希望视图被自动更新——如果我向下钻取到某个东西,突然树被重置了,我会很生气。我认为显示“目录更新可用、按“刷新”查看新项目(类似于“新答案”消息)或只突出显示“刷新”按钮(更改其背景色或其他内容)要友好得多。

        2
  •  1
  •   Alan Geleynse buhbang    15 年前

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

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

    一个简单的方法(也许不是最好的解决方案)是引用模型上的JTree。然后,您可以告诉jtree在模型更改时刷新,而这种方式需要更改视图。