1

我正在使用 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.

我不确定这意味着什么。

4

1 回答 1

1

Java 8 日期选择器

使用Java 8 + SceneBuilder 2,它有一个 DatePicker。

两者都是抢先体验(尤其是 SceneBuilder 2)。暂时不要对 SceneBuilder 2 的稳定性抱有太大期望,它的实现目前非常粗糙,不如 SceneBuilder 1.1 完善。


jfxtras 和 fxml

关于在 SceneBuilder 1.1 中使用 jfxtras 控件,我的猜测是它不被支持。

为了为 Java 7 构建 jfxtras 控件,jfxtras 开发人员有必要使用私有 API,因为 Java 8 中不提供用于构建自定义控件的功能完整的公共 API。使用私有 API 可能会导致不同的兼容性问题SceneBuilder 版本,因为它将控制二进制文件绑定到仅适用于某些 JavaFX 版本(因为在新的 Java 版本中不保证私有 JavaFX api 的向后兼容性)。

此外,jfxtras 开发人员可能没有实现使他们的控件与 FXML 一起工作所需的构建器类。这似乎是这种情况,因为缺少合适的构建器是导致错误的原因:javafx.fxml.LoadException: Element does not define a default property.


实现自己的构建器

您可以在FXML 简介中阅读有关构建器和 fxml 的更多信息。如果您愿意,您可以为 jfxtras 实现一个构建器CalendarTextField(虽然我不会在这个答案中写一个)。如果您确实实现了适当的构建器,那么您很有可能能够使用 SceneBuilder 1.1 使用的 FXML 中的控件。

于 2013-11-20T06:03:39.617 回答