2016-05-19 7 views
0

Ich habe einen Dialog in Jython geschrieben, der JComboBoxes mit Objekten verwendet. Dies funktioniert in Jython 2.5, aber nicht in Jython 2.1, das ich ebenfalls unterstützen muss.JComboBox verwendet keine String-Darstellung von Objekten in Jython 2.1

Die Klasse sieht ungefähr wie folgt aus:

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 

ich jede Methode versucht, die Umsetzung, die ich, dass konvertiert das Objekt in einen String denken könnte, aber in Jython 2.1 ich immer noch so etwas wie [email protected] statt der get Zeichenfolgendarstellung in der JComboBox.

Wenn ich das Objekt auf der Konsole drucke, funktioniert es einwandfrei und druckt die von mir definierte Darstellung.

Irgendeine Idee, was das Problem sein könnte und wie ich es umgehen kann?

Antwort

0

Ich habe Jython 2.1 nicht um, aber auf 2.2 können Sie das Problem umgehen, indem Item von java.lang.Object und überwiegenden toString() wie diese Ableitung:

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)