Как создать файл FXML для уже созданного нового компонента в java, чем добавить его в конструктор сцен?

Я новичок в javaFX. Я создал настраиваемое поле поиска (расширяет TextField) в java, проверьте изображение:

введите описание изображения здесь

Я тестировал его с тестовым classом, и он работает.

Я хочу знать сейчас, если можно создать файл FXML, чем добавить этот компонент в конструктор сцен? как это сделать ? Заранее спасибо.

Как импортировать компонент из JAR в SceneBuilder

Вы можете поместить свой компонент в Jar и импортировать его в SceneBuilder. Вам не нужно создавать файл FXML для вашего компонента, чтобы добавить его в панель библиотеки SceneBuilder.

См. Раздел Добавление пользовательских компонентов в библиотеку в руководстве пользователя JavaFX.

Чтобы импортировать пользовательские компоненты графического интерфейса из файла JAR или FXML:

  1. Выберите команду « Импортировать файл JAR / FXML» в меню панели «Библиотека» или перетащите файл JAR или FXML непосредственно из собственного файлового менеджера вашей системы (Explorer или Finder) и переместите его на панель «Библиотека»

  2. В диалоговом окне «Открыть» перейдите к местоположению файла JAR или FXML, который вы хотите импортировать. Отобразится диалоговое окно импорта, аналогичное тому, что показано на рисунке 8-4 . Содержимое JAR-файла проверяется, и все classы Java, которые определяются как подходящие настраиваемые компоненты, отображаются в диалоговом окне. Содержимое файла FXML анализируется, чтобы убедиться, что добавляемый компонент является действительным и автономным.

  3. В диалоговом окне «Импорт» выберите или отмените выбор элементов из списка элементов, которые вы можете импортировать.

  4. Нажмите « Импортировать компоненты». Импортированные элементы добавляются в раздел «Пользовательский» панели «Библиотека». Они могут быть использованы немедленно, и они сохраняются в Библиотеке даже после перезапуска 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 ); } } 

Предварительные требования к компоненту

Для того, чтобы процесс работал, вам необходимо выполнить несколько действий:

  1. Класс вашего компонента расширяет узел.
  2. У вашего classа компонента нет конструктора аргументов.
  3. Класс компонента и конструктор аргументов не являются общедоступными.
  4. Класс компонента находится в пакете (например, org.jewelsea) – у него не может быть пакета.
  5. Класс компонента упакован в файл JAR, который был импортирован в SceneBuilder, как описано выше.

Исправление проблем

Если у вас возникли проблемы с импортом JAR, после попытки импортировать JAR вы можете использовать описанную ниже функцию анализа JAR, чтобы помочь устранить неполадки (что может помочь или может просто предоставить некоторую загадочную информацию, чтобы смутить вас больше).

анализ файла jar

  • Как вернуть значение с этапа до его закрытия?
  • JavaFX и maven: NullPointerException: требуется место
  • Приложение зависает или «Не работает stream приложений FX» происходит во время активности приложения
  • Пользовательская всплывающая панель JavaFX 2
  • JavaFX - setVisible не «скрывает» элемент
  • Где пропал сценарий JavaFX?
  • Проверка столкновения фигур с JavaFX
  • Использование streamов для создания запросов к базе данных
  • Проект Maven с JavaFX (с файлом jar в `lib`)
  • Как создать модальное окно в JavaFX 2.1
  • Копируемый ярлык / TextField / LabeledText в JavaFX
  • Interesting Posts

    Почему замораживание Chrome?

    Удалить встроенные субтитры из файла .mkv?

    Концепция концепции проверки Struts 2

    Если я обновляю окна с 7 по 8 на одном диске, я могу скопировать установку на другой диск?

    Итерирование по основному циклу «для» с использованием Handlebars.js

    Масштабирование и прокрутка в SpriteKit

    Ассоциированное расширение файла с помощью приложения

    Разделение памяти Android

    Случайно выберите элемент из списка

    Присоединение двух PDF-файлов с немного отличающимся размером страницы с помощью pdfjoin

    Разница между защитой контента и DRM

    Невозможно файлы TFTP clonezilla с TFTP-сервера WDS во время загрузки PXE

    Направление пользователя в дочернее состояние при переходе в его родительское состояние с использованием UI-Router

    Android: как вы проверяете, включен ли определенный AccessibilityService

    Менеджер CLLocation в Swift, чтобы получить местоположение пользователя

    Давайте будем гением компьютера.