Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么swing不对传递给JComboBox的对象调用toString()?_Java_Python_Swing_Jython_Tostring - Fatal编程技术网

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可以重新创建对象想法的返回码已被怀疑一段时间;结果证明这是一个坏主意,或者至少在太多情况下不可行。