2010-01-11 115 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