我有一个用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中的字符串表示。
如果我将对象打印到控制台,它可以正常工作并打印我定义的表示。
知道问题可能是什么以及如何解决它?
答案 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)