Почему свинг не вызывает toString () для объектов, которые я передаю в JComboBox? - PullRequest
1 голос
/ 05 августа 2011

У меня есть этот класс для представления вариантов в выпадающем списке:

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, но могу получитьидентификатор позже, после того, как массив вышел из области видимости.

Что касается средств визуализации JComboBox, в руководстве по Java Swing написано ,

Средство визуализации по умолчанию знает, как отображать строки и значки.Если вы помещаете другие объекты в поле со списком, средство визуализации по умолчанию вызывает метод toString для предоставления отображаемой строки.

Итак, учитывая, что я добавил toString() метод к своему Choice класс, я должен просто быть в состоянии сделать это:

choices = [Choice(1, 'foo'), Choice(3, 'bar'), Choice(5, 'baz')]
combo = JComboBox(choices)

, а затем позже:

pickedId = combo.getSelectedItem().id

Однако текст, который отображается в моем комбо, похож на <command.Choice object at 0x2>, иэтого print заявления, которое я вставил в Choice.toString(), никогда не происходит.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Нашли это!На обратной стороне ответа Атри и комментария JimN я обнаружил, что эквивалент Python для toString() на самом деле __repr__.

Так что мой класс теперь выглядит так:

2 голосов
/ 05 августа 2011

Вы должны переопределить __str__(self) в вашем классе Python.

...