jfxtras CalendarTextField не может быть загружен в Scene Builder

Я использую 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" />

Похоже, все работало нормально, но когда я открыл свой файл FXML в Scenebuilder, я получил следующую ошибку:

    fxml:99: error: 
    javafx.fxml.LoadException: Element does not define a default property.

Я не уверен, что это значит.

1 ответ

Решение

Java 8 DatePicker

Используйте Java 8 + SceneBuilder 2, у него есть DatePicker.

Оба имеют ранний доступ (особенно SceneBuilder 2). Не стоит долго ожидать стабильности SceneBuilder 2, его реализация в настоящее время довольно грубая и не такая отточенная, как SceneBuilder 1.1.


jfxtras и fxml

Что касается использования элементов управления jfxtras в SceneBuilder 1.1, я предполагаю, что это просто не поддерживается.

Чтобы создать элементы управления jfxtras для Java 7, разработчикам jfxtras необходимо было использовать частные API, так как общедоступные API с полным набором функций для создания пользовательских элементов управления недоступны в Java 8. Использование частных API может вызвать проблемы совместимости с различными Версии SceneBuilder, поскольку он связывает двоичные файлы управления для работы только с определенными версиями JavaFX (поскольку обратная совместимость частного JavaFX apis не гарантируется в новых версиях Java).

Кроме того, разработчики jfxtras, возможно, не реализовали классы построителя, необходимые для работы их элементов управления с FXML. Казалось бы, это так, так как отсутствие соответствующего компоновщика и вызывает ошибку: javafx.fxml.LoadException: Element does not define a default property,


Реализация собственного строителя

Вы можете узнать больше о сборщиках и fxml в разделе Введение в FXML. Вы можете реализовать конструктор для jfxtras CalendarTextField если хотите (я не буду писать один в этом ответе). Если вы внедрили соответствующий компоновщик, есть реальная вероятность, что вы сможете использовать элемент управления в FXML, используемый SceneBuilder 1.1.

Другие вопросы по тегам