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

How to make a non-editable ComboBox display promptText?

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

当控件是 TextField 时,我使用 promptText 属性 将字符串 (Multiple conflicting values) 放入 TextField 并使用描述的技巧here 以确保 promptText 在用户输入字段之前保持可见。这很好用。

现在,我想用 ComboBox 做同样的事情,但我发现 ComboBox 只有在 editable 属性 设置为 true。这对我来说是个问题,因为我不希望用户在 ComboBox 中键入任意字符串。我想将他限制在一组预先确定的选择范围内。

有没有办法让 ComboBox 显示 promptText,即使它的 editable 属性 设置为 false?就我而言,扩展 ComboBox 是一个可以接受的解决方案。

如果我将 ComboBox 设置为可编辑,然后获取编辑器(TextField)并将其设置为不可编辑,一切似乎都正常。

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

要在用户更改 ComboBox 之前保持 promptText 可见,必须将 CSS 技巧应用于内部 TextField,而不是 ComboBox本身。

未解决的问题:

  • 用户无法在 ComboBox 中键入内容,但看起来他可以:它的样式就像他可以的那样,鼠标光标甚至呈现 I-beam悬停在 ComboBox.

  • 的编辑器部分时的外观
  • 用户必须单击按钮才能展开并查看项目。他无法再单击不可编辑的较大目标区域 ComboBox.

  • 我见过失去焦点导致这样的ComboBox产生一个selectedItem改变的事件,而新的值不是原来添加到[=23的对象=],而是原始对象的字符串表示!似乎 selectedIndex() 可以用来解决这个问题。

  • 最后也是最不重要的:我的 ComboBoxStringConverter 开始接收 nulls 而以前没有。