如何使不可编辑的ComboBox显示promptText?

时间:2015-02-04 18:18:51

标签: java combobox javafx javafx-8

我有JavaFX控件,可以与许多可能存在冲突的值相关联。

当控件是TextField时,我使用promptText属性将字符串(Multiple conflicting values)放入TextField并使用here描述的技巧确保promptText保持可见,直到用户输入字段为止。这很有效。

现在,我想对ComboBox执行相同的操作,但我发现只有ComboBox属性设置为promptText才会显示editabletrue。这对我来说是一个问题,因为我不希望用户在ComboBox中键入任意字符串。我想将他限制在一组预定的选择中。

即使ComboBox属性设置为promptText,有没有办法让editable显示false?在我的案例中,扩展ComboBox是可以接受的解决方案。

1 个答案:

答案 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,但事实并非如此。