Java 为什么swing不对传递给JComboBox的对象调用toString()?
我用这个类来表示组合框中的选项:Java 为什么swing不对传递给JComboBox的对象调用toString()?,java,python,swing,jython,tostring,Java,Python,Swing,Jython,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对象数组,我想在JComboBo
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渲染器的主题
默认渲染器知道如何渲染字符串和图标。如果将其他对象放在组合框中,默认呈现程序将调用toString方法以提供要显示的字符串
因此,考虑到我已经在Choice类中添加了一个toString方法,我应该能够做到这一点:
choices = [Choice(1, 'foo'), Choice(3, 'bar'), Choice(5, 'baz')]
combo = JComboBox(choices)
后来:
pickedId = combo.getSelectedItem().id
然而,在我的组合框中显示的文本是这样的,并且我在Choice.toString中输入的print语句从未发生过
有什么想法吗?你应该在python类中重写self。你应该在python类中重写self。找到了!在Atrey的回答和JimN的评论后面,我发现Python与toString的等价物实际上是uu repr_u 所以我的课现在看起来像:
class Choice(object):
def __init__(self, id, label):
self.id = id
self.label = label
def __repr__(self):
return self.label
找到了!在Atrey的回答和JimN的评论后面,我发现Python与toString的等价物实际上是uu repr_u 所以我的课现在看起来像:
class Choice(object):
def __init__(self, id, label):
self.id = id
self.label = label
def __repr__(self):
return self.label
假设。toString是用于Java的__str_________________________________。事实证明,toString的等价物不是str,而是repr。谢谢你给我指明了正确的方向假设。toString是用于Java的__str_________________________________。事实证明,toString的等价物不是str,而是repr。谢谢你给我指明了正确的方向我不熟悉python/jython,但是您创建的toString方法可能没有扩展void对象。toString可能签名不匹配。尝试使用javap检查编译的类。我不熟悉python/jython,但是您创建的toString方法可能没有扩展void Object。toString可能签名不匹配。尝试使用javap检查编译后的类。这很有趣,因为_urepr_uuuuuuuuuuu应该返回一个python代码来重新创建对象,而_ustr_uuuuuuuu应该返回一个更自然的对象表示。好发现@Atreys可以重新创建对象想法的返回码已被怀疑一段时间;结果证明这是一个坏主意,或者至少在太多情况下不可行。有趣的是,_urepr_uuuuuuuuuuuu应该返回python代码来重新创建对象,而uu str_uuuuu应该返回对象的更自然的表示。好发现@Atreys可以重新创建对象想法的返回码已被怀疑一段时间;结果证明这是一个坏主意,或者至少在太多情况下不可行。