我有JavaFX控件,可以与许多可能存在冲突的值相关联。
当控件是TextField
时,我使用promptText
属性将字符串(Multiple conflicting values)
放入TextField
并使用here描述的技巧确保promptText
保持可见,直到用户输入字段为止。这很有效。
现在,我想对ComboBox
执行相同的操作,但我发现只有ComboBox
属性设置为promptText
才会显示editable
到true
。这对我来说是一个问题,因为我不希望用户在ComboBox
中键入任意字符串。我想将他限制在一组预定的选择中。
即使ComboBox
属性设置为promptText
,有没有办法让editable
显示false
?在我的案例中,扩展ComboBox
是可以接受的解决方案。
答案 0 :(得分:2)
如果我设置ComboBox
可编辑,然后获取编辑器(TextField
)并将其设置为不可编辑,则一切似乎都有效。
comboBox.setEditable(true)
comboBox.getEditor().setEditable(false)
要在用户更改promptText
之前保持ComboBox
可见,必须将CSS技巧应用于内部TextField
,而不是ComboBox
本身。
用户无法输入ComboBox
,但看起来他可以:它的样式就像他一样,鼠标光标甚至可以假定为I
- 光束外观将鼠标悬停在ComboBox
。
用户必须点击按钮才能展开并查看相关项目。他无法再点击不可编辑ComboBox
的较大目标区域。
我看到焦点丢失导致ComboBox
生成selectedItem
更改事件,而新值不是最初添加到ComboBox.getItems()
的对象,但是原始对象的字符串表示!似乎selectedIndex()
可用于解决此问题。
最后和最不重要:我的ComboBox
StringConverter
之前开始接收null
,但事实并非如此。