2010-11-08 78 views
1

我有一個使用SWT的MVCish設計。我有一個實現整個GUI(按鈕和動作偵聽器)的類,它有一個Shop對象,它有一個項目列表。有時候,使用RMI(學校作業),該列表正在更新(如果雜誌中有新內容,它會告訴服務器和服務器將新列表傳播到所有商店),而且非常酷。問題是我不知道如何讓GUI只需按下按鈕就可以重新繪製新列表。我想要做的:

1)有在雜誌
2新的內容)發送新的列表服務器
3)服務器發送列表中的所有商店
4)每家店鋪更新其名單
5)每個商店都會以某種方式告訴GUI重新繪製表示列表的JTree。

我已經完成了1-4分。是否有可能實現5)?我有意嘗試將模型和控制器分開(因爲我們必須創建一個終端和一個GUI界面),但現在我發現商店獲得了新的列表,並且它甚至不知道GUI的存在(僅僅是就像一個正常的MVC)。
現在我有一個「刷新」按鈕,從商店對象取表並更新JTree的模型,但是從我的老師告訴我,他希望它是自動的。我可以通過在同一個班級中寫作商店和gui來實現,但這很有趣。模型可以刷新視圖嗎?

+0

@Software:[「家庭作業標籤與其他所謂的'meta'標籤一樣,現在不鼓勵,」](http://meta.stackexchange.com/q/10812),但Zenzen請遵循[一般準則](http://tinyurl.com/so-hints),包括陳述具體的限制,你迄今爲止所嘗試的內容,以及特別令你困惑的內容。 – 2010-11-08 19:32:34

+0

那麼作業標籤是由別人編輯的,我覺得我很清楚自己的問題。 – 2010-11-08 19:37:02

+0

@Roger:我沒有意識到這一點 - 感謝您指出。 – 2010-11-08 20:20:49

回答

2

你可以讓你的視圖模型的觀察員,並獲得通知的方式。否則,您可以安排定期任務來執行刷新操作。

從一個UI來看,我不希望該圖是自動更新 - 如果我是向下鑽取到的東西,突然樹上被重置,我很惱火。我認爲顯示諸如「目錄更新可用,按'刷新'以查看新項目」(類似於「新答案」消息)或者可以突出顯示刷新按鈕(改變其背景顏色或某物)。

+0

哦,我沒有想到Observer模式,會試試看,謝謝。個人而言,我也更喜歡「刷新」按鈕和「有新的列表可用」或「您嘗試使用的文件不可用,請嘗試刷新」等警告,但我厭倦了與我的老師總是知道更好。謝謝。 – 2010-11-08 20:26:49

1

你所尋找被稱爲數據綁定。數據綁定是將模型和視圖連接在一起的想法,以便更新後的模型自動更新視圖。

不幸的是有一個快速搜索,它看起來並不像有JTree的數據綁定提供解決方案。我可能是錯的,但搜索引導我相信你必須自己寫一個。

一個簡單的方法(儘管也許不是最好的解決辦法),將有模型上的參考JTree的。然後,您可以隨時通知JTree刷新模型,以便更改視圖。

+0

啊是的我知道我可以給模型提供JTree的參考,但我真的不喜歡我的MVC中的額外依賴。感謝「數據綁定」完全忘記了它我會谷歌周圍,謝謝。 – 2010-11-08 19:24:35