2011-07-15 86 views
4

我目前正在編寫一個程序,它在GUI方面和數據存儲方面存在大量代碼重複,而且我想知道我的建議解決方案是否遵循可接受的設計原則。Java Swing:列表模型和集合

基本上,我有一些數據對象,其中有一個列表持有更多的信息。然後GUI顯示該對象,並顯示一個JList,顯示Data對象列表中的所有信息。在GUI中,用戶可以添加或刪除信息到對象的列表中,這在JList中可視化地反映出來。

然而,這導致我不得不保持GUI JList和單獨的對象列表:

private void addInformation(String s) { 
    this.listmodel.addElement(s); 
    this.dataObject.getList().add(s); 
} 

(顯然,這是一個非常簡單的例子,但你的想法)。這也意味着我用兩倍的內存來保存這兩個列表。創建一個實現ListModel和List接口的類,然後只需要更新單個組合列表/列表模型是否可以接受?我仍然在uni學習,我希望在其他人可維護性和遵守最佳實踐方面儘可能做到最好。

+0

我不確定,我瞭解你。 [也許這可以幫助你](http://download.oracle.com/javase/tutorial/uiswing/components/combobox.html#renderer) – timaschew

回答

3

您的GUI不應該保存關於數據模型狀態的信息。將它分成模型 - 視圖 - 控制器(MVC)設計會更好。控制器負責創建對象並相應地更新模型和視圖。您的實際視圖應通過傳遞參數來顯示屏幕顯示負責。通過這種方式,視圖和模型不需要了解彼此的任何信息,只會有一個數據模型。

如果您必須保持兩個列表一致,那麼您的設計出現問題,並且可能會在代碼中引入更多的錯誤。

參見here for MVC details.

2

的Java Swing使用separable model architecture到模型(例如ListModelTable Model)和相應的視圖(JListJTable)之間最小化耦合。你不要使用更多的內存。

2

我建議你使用ListModel接口的實現(如DefaultListModel)來保存你的數據。然後bind it到你的JList。如果默認渲染器不適合,請將您自己的自定義ListCellRenderer和apply寫入JList對象。