我遇到了一些我怀疑是JavaFX中的错误,但我不完全确定。
我使用自定义数据类型实现了一个组合框:
@FXML
ComboBox <MyDataType> cbox;
如果我使用以下方式访问组合框的选定项目属性:
MyDataType data = cbox.getSelectionModel().getSelectedItem();
它将返回对所选对象的引用,但仅当组合框具有焦点时 。
如果组合框没有焦点,则所选项目将作为字符串返回,Java会抛出运行时错误,声称我正在尝试将字符串转换为MyDataType。
如果我放弃对选择模型的调用并且只使用:
,则会观察到完全相同的行为MyDataType data = cbox.getValue();
我可以通过在检索所选项目之前简单地使用组合框请求焦点来解决它,但似乎很奇怪我应该这样做。
我找不到任何关于此的文档。似乎不太可能这么大的东西会成为一个错误,但我想我会看到是否有人知道这件事......
更新
我的用例已将一个FXML组件嵌套在另一个组件中,并且尝试访问组合框的自定义数据值来自一个分配给包含组件的回调(它是一个带有apply / done / cancel按钮的对话框,需要单独使用组件提供对话框的内容。)
在我看来,问题就在于此,因为我无法在仅使用单个组件的骨架应用程序中重现该问题。