Как сделать так, чтобы не редактируемый ComboBox отображал подсказку для текста?

1

У меня есть элементы управления JavaFX, которые могут быть связаны со многими потенциально противоречивыми значениями.

Когда элемент управления является TextField, я использую свойство promptText чтобы поместить строку (Multiple conflicting values) в TextField и использовать трюк, описанный здесь, чтобы гарантировать, что promptText остается видимым, пока пользователь не promptText в поле. Это отлично работает.

Теперь я хотел бы сделать то же самое с ComboBox, но я обнаружил, что ComboBox отобразит promptText только в том случае, если для свойства editable установлено значение true. Это проблема для меня, потому что я не хочу, чтобы пользователь вводил произвольные строки в ComboBox. Я хочу ограничить его набором предопределенных выборов.

Есть ли способ заставить ComboBox отображать promptText даже если для ее editable свойства установлено значение false? Расширение ComboBox является приемлемым решением в моем случае.

Теги:
javafx
javafx-8
combobox

1 ответ

2
Лучший ответ

Кажется, что все работает, если я устанавливаю ComboBox редактирования, а затем приобретаю редактор (TextField) и устанавливаю его в не редактируемый.

comboBox.setEditable(true)
comboBox.getEditor().setEditable(false)

Чтобы promptText отображался до тех пор, пока пользователь не изменит ComboBox, необходимо применить трюки CSS к внутреннему TextField, а не к самому ComboBox.

Неразрешенные проблемы:

  • Пользователь не может вводить в ComboBox, но похоже, что он может: он стилизован, как он может, и курсор мыши даже предполагает появление I -beam, когда он зависает над частью редактора ComboBox.

  • Пользователь должен щелкнуть по кнопке, чтобы развернуть и увидеть элементы. Он больше не может нажимать на большую целевую область не редактируемого ComboBox.

  • Я видел, что потеря фокуса вызывает такой ComboBox чтобы генерировать selectedItem событие с измененным событием, а новое значение не является объектом, первоначально добавленным в ComboBox.getItems(), а строковым представлением исходного объекта! Кажется, что selectedIndex() можно использовать, чтобы обойти это.

  • Последнее и наименее: мой ComboBox StringConverter начал получать null если раньше, это не так.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню