2010-01-11 116 views
7

我正在使用DefaultComboBoxModel來顯示JComboBox中的客戶列表。該列表目前僅顯示其名稱。我還希望對DefaultComboBoxModel中的每個客戶都有一個參考,這樣當選擇某個名稱時,它也包含對真實客戶對象的引用。Java Swing:擴展DefaultComboBoxModel並覆蓋方法

爲了達到這個目的,我懷疑我必須擴大DefaultComboBoxModel並可能覆蓋addElement()方法?或者我可以添加一個新的方法,也可以將我的參考信息存儲到客戶中?如果是這樣,我必須查看DefaultComboBoxModel的源代碼以瞭解它如何存儲元素?對不起,如果這個問題很混亂,但我不知道如何以正確的方式做到這一點。謝謝閱讀。

回答

6

如果你在你的Customer對象中重寫toString()來返回你想要在JComboBox中呈現的任何東西,它就會工作得很好。如果您將toString用於其他目的,則需要重寫模型或渲染器以使用Customer對象中的正確字段。

-Update Tom's Suggestion- 創建一個新的對象CustomerView,該對象封裝了真實的客戶對象,因此可以提供對其的引用,但也會覆蓋toString()以返回客戶的名稱。

+3

如果更改'Customer.toString'不合適,則不要更改模型或(更多)渲染器,而是添加具有「Customer」對象的適當顯示錶示的「CustomerComboView」(或類似名稱) 'toString'和'getCustomer' /'customer')。 – 2010-01-11 13:52:01

+0

@Tom Hawtin - 謝謝你明顯好多了 – willcodejavaforfood 2010-01-11 14:50:37

+0

優秀的建議,謝謝你們倆! – Johan 2010-01-11 15:00:44