У меня есть элементы управления JavaFX, которые могут быть связаны со многими потенциально противоречивыми значениями.
Когда элемент управления является TextField
, я использую свойство promptText
чтобы поместить строку (Multiple conflicting values)
в TextField
и использовать трюк, описанный здесь, чтобы гарантировать, что promptText
остается видимым, пока пользователь не promptText
в поле. Это отлично работает.
Теперь я хотел бы сделать то же самое с ComboBox
, но я обнаружил, что ComboBox
отобразит promptText
только в том случае, если для свойства editable
установлено значение true
. Это проблема для меня, потому что я не хочу, чтобы пользователь вводил произвольные строки в ComboBox
. Я хочу ограничить его набором предопределенных выборов.
Есть ли способ заставить ComboBox
отображать promptText
даже если для ее editable
свойства установлено значение false
? Расширение ComboBox
является приемлемым решением в моем случае.
Кажется, что все работает, если я устанавливаю 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
если раньше, это не так.