Java Swing setEditable (логическое значение) не работает в JComboBox с пользовательским средством визуализации

У меня есть JComboBox типа myclass. Я использую CustomListRender для отображения одного из атрибутов myclass, и он отлично работает.

Затем я установил myCombobox.setEditable(true). JComboBox становится доступным для редактирования, но по умолчанию текст устанавливается примерно так в combobox:

 com.mypackagename.myclass

Кто-нибудь может сказать мне, как решить эту проблему?

Заранее спасибо.


person Krishna Shrestha    schedule 07.10.2012    source источник
comment
Возможно, вы также захотите создать и использовать собственный ComboBoxEditor.   -  person Hovercraft Full Of Eels    schedule 07.10.2012
comment
вы можете использовать setSelectedIndex(int ​​anIndex) или setSelectedItem(Object anObject) для инициализации ComboBox.   -  person Ould Abba    schedule 07.10.2012


Ответы (1)


Как описано в разделе Использование полей со списком: предоставление Пользовательский рендерер,

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

Если не переопределено, вы, вероятно, увидите toString() реализация унаследована от Object. Как минимум, вам потребуется переопределить MyClass#toString() или обновить средство визуализации, указав пользовательский редактор соответственно; есть соответствующий пример здесь. Большинство предпочло бы последнее; ваш sscce, показывающий ваш собственный модуль визуализации, упростит предложение альтернатив.

person trashgod    schedule 07.10.2012
comment
MyClass используется для соответствия соглашению об именах классов Java. - person trashgod; 07.10.2012
comment
Насколько я понимаю вопрос, у него уже есть кастомный рендерер. Что ему нужно, так это пользовательский редактор, чтобы избежать toString вызова стандартного редактора. И я не большой поклонник переопределения toString для целей пользовательского интерфейса. - person Robin; 07.10.2012
comment
@Robin: Хорошее замечание о редакторе; обновлено. Я бы приветствовал более подходящий пример, чем тот, который я привел. Я более оптимистично отношусь к переопределению toString(), скажем, в enum. Я сосредоточился на этом, чтобы объяснить (предполагаемый) результат, упомянутый в вопросе. Можно подробнее о подводных камнях? - person trashgod; 07.10.2012
comment
Не настоящая ловушка, за исключением того, что даже в производственном коде я осмеливаюсь регулярно менять метод toString, чтобы предоставлять более качественную информацию (например, для вывода дополнительной информации в регистраторе). Скрытая зависимость от этого метода при использовании средства визуализации/редактора по умолчанию, а не пользовательского, может нарушить пользовательский интерфейс в этом случае. И моя IDE никогда не обнаружит, что toString используется в рендерере. - person Robin; 07.10.2012