为什么Swing不对传递给JComboBox的对象调用toString()?
我有一个类用来表示下拉框中的选项:
class Choice(object):
def __init__(self, id, label):
self.id = id
self.label = label
def toString(self):
print "in Choice.toString" #for debugging
return self.label
我有一个包含Choice
对象的数组,我想在JComboBox中显示这些选项的标签值,但又希望在数组不再使用后,能够获取到它们的ID。
关于JComboBox的渲染器,Java Swing教程中提到,
默认的渲染器知道如何显示字符串和图标。如果你在下拉框中放入其他对象,默认渲染器会调用这些对象的toString方法来提供一个字符串进行显示。
所以,既然我已经在我的Choice
类中添加了一个toString()
方法,我应该可以这样做:
choices = [Choice(1, 'foo'), Choice(3, 'bar'), Choice(5, 'baz')]
combo = JComboBox(choices)
然后稍后:
pickedId = combo.getSelectedItem().id
然而,我的下拉框中显示的文本却是<command.Choice object at 0x2>
,而我在Choice.toString()
中放的print
语句从来没有执行过。
有什么想法吗?
2 个回答
2
你应该在你的Python类里面重写一下 __str__(self)
这个方法。
3
找到了!根据Atrey的回答和JimN的评论,我发现Python中和toString()
相对应的其实是__repr__
。
所以我现在的类看起来是这样的:
class Choice(object):
def __init__(self, id, label):
self.id = id
self.label = label
def __repr__(self):
return self.label