Как создать файл FXML для уже созданного нового компонента в java, чем добавить его в конструктор сцен?
Я новичок в javaFX. Я создал настраиваемое поле поиска (расширяет TextField) в java, проверьте изображение:
Я тестировал его с тестовым classом, и он работает.
- Исключение «Место требуется» при загрузке файла FXML
- Каков рекомендуемый способ создания числового текстового поля в JavaFX?
- Настройка cookie с помощью WebEngine / WebView JavaFX
- Разработка программного обеспечения JavaFX
- Нужно ли @FXML для каждого объявления?
Я хочу знать сейчас, если можно создать файл FXML, чем добавить этот компонент в конструктор сцен? как это сделать ? Заранее спасибо.
- Интеграция JavaFX 2.0 WebView в приложение Swing Java SE 6
- Добавление других видеокодеков / DVD-поддержки в JavaFX 2.2
- Автоматическое изменение размера javafx и добавление кнопок
- JavaFX WebView растет, чтобы заполнить всю область
- Постоянно проверяя, коснулась ли пуля узла
- Как обновить поле метки каждые 2 секунды в java fx?
- Автоматически изменять размер canvasа, чтобы заполнить входящий родитель
- Как испускать и обрабатывать пользовательские события?
Как импортировать компонент из JAR в SceneBuilder
Вы можете поместить свой компонент в Jar и импортировать его в SceneBuilder. Вам не нужно создавать файл FXML для вашего компонента, чтобы добавить его в панель библиотеки SceneBuilder.
См. Раздел Добавление пользовательских компонентов в библиотеку в руководстве пользователя JavaFX.
Чтобы импортировать пользовательские компоненты графического интерфейса из файла JAR или FXML:
Выберите команду « Импортировать файл JAR / FXML» в меню панели «Библиотека» или перетащите файл JAR или FXML непосредственно из собственного файлового менеджера вашей системы (Explorer или Finder) и переместите его на панель «Библиотека»
В диалоговом окне «Открыть» перейдите к местоположению файла JAR или FXML, который вы хотите импортировать. Отобразится диалоговое окно импорта, аналогичное тому, что показано на рисунке 8-4 . Содержимое JAR-файла проверяется, и все classы Java, которые определяются как подходящие настраиваемые компоненты, отображаются в диалоговом окне. Содержимое файла FXML анализируется, чтобы убедиться, что добавляемый компонент является действительным и автономным.
В диалоговом окне «Импорт» выберите или отмените выбор элементов из списка элементов, которые вы можете импортировать.
Нажмите « Импортировать компоненты». Импортированные элементы добавляются в раздел «Пользовательский» панели «Библиотека». Они могут быть использованы немедленно, и они сохраняются в Библиотеке даже после перезапуска Scene Builder
Примечание. SceneBuilder также поддерживает импорт компонентов на основе FXML, а не просто компонентов прямого кода. В этом ответе обсуждается импорт только кодов, которые не содержат FXML.
Пример использования импортированного компонента
Вот компонент пользовательского поля поиска, который я импортировал в SceneBuilder, используя метод, описанный выше.
Верхняя панель поиска находится в панели проектирования Scene Builder, нижняя панель поиска – результат использования функции предварительного просмотра сценария и поиска счастья.
Сгенерированный код SceneBuilder
Файл fxml, который был сгенерирован SceneBuilder на основе дизайна, включен здесь. Обратите внимание: это была тестовая сцена, которую я создал с помощью SceneBuilder для тестирования уже импортированного компонента – он не был частью процесса импорта компонентов.
Образец (импортируемый) Код компонента
Код для поля поиска, который был импортирован:
package org.jewelsea; import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; public class SearchField extends StackPane { private final TextField textField; private final Button searchButton; private final Label searchResults; public SearchField() { textField = new TextField(); textField.setPromptText( "Search Text" ); searchButton = new Button("Search"); searchResults = new Label(); VBox layout = new VBox( 20, new HBox( 10, textField, searchButton ), searchResults ); layout.setPadding(new Insets(10)); searchButton.setOnAction(event -> searchResults.setText( "Search result for " + textField.getText() ) ); getChildren().setAll( layout ); } }
Предварительные требования к компоненту
Для того, чтобы процесс работал, вам необходимо выполнить несколько действий:
- Класс вашего компонента расширяет узел.
- У вашего classа компонента нет конструктора аргументов.
- Класс компонента и конструктор аргументов не являются общедоступными.
- Класс компонента находится в пакете (например, org.jewelsea) – у него не может быть пакета.
- Класс компонента упакован в файл JAR, который был импортирован в SceneBuilder, как описано выше.
Исправление проблем
Если у вас возникли проблемы с импортом JAR, после попытки импортировать JAR вы можете использовать описанную ниже функцию анализа JAR, чтобы помочь устранить неполадки (что может помочь или может просто предоставить некоторую загадочную информацию, чтобы смутить вас больше).