我正在使用Netbeans和Scenebuilder来创建JavaFX项目。我意识到Scenebuilder没有日期选择器组件,所以我下载了jfxtras并将库添加到我的类路径中。我使用以下代码将CalendarTextField对象添加到我的FXML文件中:
<?import jfxtras.labs.scene.control.*?>
<CalendarTextField fx:id="setupdate" prefWidth="200.0" showTime="true" GridPane.columnIndex="3" GridPane.rowIndex="8" />
它似乎工作正常但是,当我在Scenebuilder中打开我的FXML文件时,我收到以下错误:
fxml:99: error:
javafx.fxml.LoadException: Element does not define a default property.
我不确定这意味着什么。
答案 0 :(得分:1)
Java 8 DatePicker
使用Java 8 + SceneBuilder 2,它有一个DatePicker。
两者都是早期访问(特别是SceneBuilder 2)。不要期待SceneBuilder 2的稳定性有一段时间,它的实现目前非常粗糙,并不像SceneBuilder 1.1那样精致。
jfxtras和fxml
关于在SceneBuilder 1.1中使用jfxtras控件,我的猜测是它不受支持。
为了构建Java 7的jfxtras控件,jfxtras开发人员必须使用私有API,因为用于构建自定义控件的功能完整的公共API在Java 8中不可用。私有API的使用可能会导致兼容性不同的SceneBuilder版本存在问题,因为它将控制二进制文件绑定到仅与某些JavaFX版本一起使用(因为新Java版本不保证私有JavaFX apis的向后兼容性)。
此外,jfxtras开发人员可能尚未实现使其控件与FXML一起工作所需的构建器类。这似乎是这种情况,因为缺少适当的构建器会产生错误:javafx.fxml.LoadException: Element does not define a default property
。
实施您自己的构建器
您可以在Introduction to FXML中详细了解构建器和fxml。如果你愿意,你可以为jfxtras CalendarTextField
实现一个构建器(虽然我不会在这个答案中写一个)。如果你确实实现了一个合适的构建器,那么你就有可能在SceneBuilder 1.1使用的FXML中使用该控件。