我有一個使用SWT的MVCish設計。我有一個實現整個GUI(按鈕和動作偵聽器)的類,它有一個Shop對象,它有一個項目列表。有時候,使用RMI(學校作業),該列表正在更新(如果雜誌中有新內容,它會告訴服務器和服務器將新列表傳播到所有商店),而且非常酷。問題是我不知道如何讓GUI只需按下按鈕就可以重新繪製新列表。我想要做的:
1)有在雜誌
2新的內容)發送新的列表服務器
3)服務器發送列表中的所有商店
4)每家店鋪更新其名單
5)每個商店都會以某種方式告訴GUI重新繪製表示列表的JTree。
我已經完成了1-4分。是否有可能實現5)?我有意嘗試將模型和控制器分開(因爲我們必須創建一個終端和一個GUI界面),但現在我發現商店獲得了新的列表,並且它甚至不知道GUI的存在(僅僅是就像一個正常的MVC)。
現在我有一個「刷新」按鈕,從商店對象取表並更新JTree的模型,但是從我的老師告訴我,他希望它是自動的。我可以通過在同一個班級中寫作商店和gui來實現,但這很有趣。模型可以刷新視圖嗎?
回答
你可以讓你的視圖模型的觀察員,並獲得通知的方式。否則,您可以安排定期任務來執行刷新操作。
從一個UI來看,我不希望該圖是自動更新 - 如果我是向下鑽取到的東西,突然樹上被重置,我很惱火。我認爲顯示諸如「目錄更新可用,按'刷新'以查看新項目」(類似於「新答案」消息)或者可以突出顯示刷新按鈕(改變其背景顏色或某物)。
哦,我沒有想到Observer模式,會試試看,謝謝。個人而言,我也更喜歡「刷新」按鈕和「有新的列表可用」或「您嘗試使用的文件不可用,請嘗試刷新」等警告,但我厭倦了與我的老師總是知道更好。謝謝。 – 2010-11-08 20:26:49
你所尋找被稱爲數據綁定。數據綁定是將模型和視圖連接在一起的想法,以便更新後的模型自動更新視圖。
不幸的是有一個快速搜索,它看起來並不像有JTree的數據綁定提供解決方案。我可能是錯的,但搜索引導我相信你必須自己寫一個。
一個簡單的方法(儘管也許不是最好的解決辦法),將有模型上的參考JTree的。然後,您可以隨時通知JTree刷新模型,以便更改視圖。
啊是的我知道我可以給模型提供JTree的參考,但我真的不喜歡我的MVC中的額外依賴。感謝「數據綁定」完全忘記了它我會谷歌周圍,謝謝。 – 2010-11-08 19:24:35
- 1. 模型可以觀察視圖嗎?
- 2. 剃刀 - 我可以製作視圖的可選模型嗎?
- 3. AChartengine線型圖,如果刷新視圖
- 4. 視圖沒有被更新的模型刷新
- 5. 刷新視圖?
- 6. 刷新視圖
- 7. 使用模型優先方法時,可以緩存視圖嗎?
- 8. 視圖模型可以偵聽自己屬性的變化嗎?
- 9. 在視圖模型中使用存儲庫可以嗎?
- 10. 我可以動態發佈視圖模型嗎?
- 11. 在1視圖中有2個模型的方法,可以嗎?
- 12. Backbone.js視圖可以有模型和集合嗎?
- 13. 我可以從子部分視圖訪問父視圖的模型嗎?
- 14. 可以將視圖模型聲明爲視圖中的靜態資源嗎?
- 15. 有什麼方法可以更新視圖中的模型?
- 16. Eclipse可以自動刷新資源嗎?
- 17. 我可以強制.htaccess刷新嗎?
- 18. 我可以從js刷新Yii CGridView嗎?
- 19. 從視圖模型更新模型
- 20. angular.js ngRoute模塊不刷新視圖
- 21. DurandalJS - 無視圖模式刷新導航
- 22. 視圖模型不更新
- 23. 從視圖更新模型
- 24. iPad:以模型視圖顯示視圖
- 25. 如何刷新JTable模型而不覆蓋視圖中的舊模型?
- 26. 角度2組件模型刷新視圖沒有模型更改
- 27. 刷新IFileDialog視圖
- 28. Acumatica刷新視圖
- 29. 刷新視圖controller.m
- 30. AngularJS控制器陣列模型修改後未刷新視圖
@Software:[「家庭作業標籤與其他所謂的'meta'標籤一樣,現在不鼓勵,」](http://meta.stackexchange.com/q/10812),但Zenzen請遵循[一般準則](http://tinyurl.com/so-hints),包括陳述具體的限制,你迄今爲止所嘗試的內容,以及特別令你困惑的內容。 – 2010-11-08 19:32:34
那麼作業標籤是由別人編輯的,我覺得我很清楚自己的問題。 – 2010-11-08 19:37:02
@Roger:我沒有意識到這一點 - 感謝您指出。 – 2010-11-08 20:20:49