JComboBox不在Jython 2.1中使用对象的字符串表示

时间:2016-05-19 11:37:08

标签: java swing jython

我有一个用Jython编写的对话框,它使用带有对象的JComboBoxes。这在Jython 2.5中运行良好,但在Jython 2.1中也不行,我也需要支持。

该课程大致如下:

class Item:
    def __init__(self, item):
        self.key = item["key"]
        self.name = item["name"]

    def __str__(self):
        return self.name

    def __unicode__(self):
        return self.name

    def __repr__(self):
        return self.name

    def toString(self):
        return self.name

    def safeRepr(self):
        return self.name

我尝试实现我能想到的将对象转换为字符串的每个方法,但是在Jython 2.1中我仍然得到类似org.python.core.PyInstance@1a2b3c的东西而不是JComboBox中的字符串表示。

如果我将对象打印到控制台,它可以正常工作并打印我定义的表示。

知道问题可能是什么以及如何解决它?

1 个答案:

答案 0 :(得分:0)

我没有Jython 2.1,但是在2.2上你可以通过从Item派生java.lang.Object并覆盖toString()来解决这个问题:

from javax.swing import JComboBox, JFrame, JPanel, WindowConstants
from java.lang import Object

class Item(Object):
    def __init__(self, item):
        self.key = item["key"]
        self.name = item["name"]

    def toString(self):
        return self.name

frame = JFrame("JComboBox using Jython objects")
frame.setSize(150, 150)

item1 = {'key': 'item1', 'name': 'First item'}
item2 = {'key': 'item2', 'name': 'Second item'}
combo_box = JComboBox([Item(item1), Item(item2)])

panel = JPanel()
panel.add(combo_box)
frame.add(panel)
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE)
frame.setVisible(True)