I have a MVCish deisgn using SWT. I have a class which implements the whole GUI (buttons and action listeners) and it has a Shop object, which has a list of items. From time to time, using RMI (school assignment), the list is being updated (if there is something new in the magazine it tells that to the server and the server propagates the new list to all shops) and it’s all cool. The problem is I have no idea how to make the GUI repaint the new list withough pressing a button. What I want to do:
1) there’s new stuff in the magazine
2) it sends the new list to the server
3) the server sends the list to all shops
4) each shop updates its list
5) each shop somehow tells the GUI to repaint the JTree representing the list.
I’ve already done points 1-4. Is it possible to implement 5)? I intentionally tried to separate the model and the controller (since we have to make a terminal and a GUI interface) but now I see that the shop gets the new list and that it doesn’t even know about the existance of the GUI (just like a normal MVC).
Now I have a “Refresh” button which takes the list from the Shop object and updates the JTree model, but from what my teacher told me he wants it to be automatic. I could do it by writing both the shop and the gui in a single class, but that kinda sucks.
You can make your view an Observer of the model, and get notifications that way. Or else you can schedule a periodic task to do your refresh action.
From a UI point of view, I wouldn’t like the view being automatically updated — if I was drilling down to something and suddenly the tree was reset, I’d be annoyed. I think it’s far friendlier to display a message like “Catalog updates available, press ‘refresh’ to see new items” (kind of like the SO “new answers” message) or maybe just highlight the refresh button (changing its background color or something).