java FXML,替代用途:使用ObservableList<>
在这个线程FXML: Alternate Uses中,我正在构建一个使用FXML直接将对象加载到内存中的应用程序
我已经成功地设置了一些对象,在这些对象中可以轻松地设置特定属性,例如hostName
、typeName
、moto
,但是在FXML中,您有一个ObservableList
中保存的JavaFXUI元素的类似列表的子节点。在FXML中使用features
(ObservableList
)属性时遇到问题。它给出了一个错误UnsupportedOperationException: cannot determine type for property
。如果可以为其他对象(如BorderPane
)添加元素,为什么它不能将元素添加到列表中
# 1 楼答案
因为
ObservableList
没有公共具体类型,所以必须使用FXCollections
工厂方法来获取实例。幸运的是,FXML设计用于处理这样的情况:通过使用fx:factory
属性。您可以在Introduction to FXML | JavaFX 10中了解有关不同fx:
选项的更多信息举个例子
元素的类型将是由
fx:factory
声明的工厂方法返回的类型。在本例中,一个ObservableList
(由一个ArrayList
支持)如果您有一个使用
ObservableList
字段(例如features
)和适当的getter定义的类,那么您应该能够执行以下操作:然而,我很难做到这一点。当我尝试它时,只有第一个元素被添加到
ObservableList
中,我不知道为什么(可能是个bug)我设法通过以下方式解决了这个问题:
出于某种原因,我在使用^{} 注释时也遇到了问题。它一直告诉我“没有默认属性”。。。但确实如此
除了“变通方法”,你可以简单地让它像其他任何属性一样“设置”
ObservableList
。或者,您可以(可能)将FXML
注释与fx:id
结合使用