Как создать файл FXML для уже созданного нового компонента в Java, чем добавить его в конструктор сцен?
3767 просмотра
1 ответ
58 Репутация автора
Я новичок в javaFX. Я создал настраиваемое поле поиска (расширяет TextField) в Java, проверьте изображение:
Я проверил это с тестовым классом, и это работает.
Теперь я хочу знать, возможно ли создать его файл FXML, чем добавить этот компонент в конструктор сцен? как это сделать ? Заранее спасибо.
Автор: ben Источник Размещён: 04.04.2015 09:17Ответы (1)
12 плюса
118405 Репутация автора
Как импортировать компонент из JAR в SceneBuilder
Вы можете поместить свой компонент в Jar и импортировать его в SceneBuilder. Вам не нужно создавать файл FXML для своего компонента, чтобы добавить его в библиотечную панель SceneBuilder.
См. Раздел « Добавление пользовательских компонентов в библиотеку » руководства пользователя JavaFX.
Чтобы импортировать пользовательские компоненты графического интерфейса из файла JAR или FXML:
Выберите команду « Импортировать файл JAR / FXML» из меню панели «Библиотека» или перетащите файл JAR или FXML непосредственно из собственного файлового менеджера вашей системы (Explorer или Finder) и перетащите его на панель «Библиотека».
В диалоговом окне «Открыть» перейдите к местоположению файла JAR или FXML, который вы хотите импортировать. Откроется диалоговое окно импорта, аналогичное показанному на рисунке 8-4 . Содержимое файла JAR проверяется, и все классы Java, определенные как подходящие пользовательские компоненты, отображаются в диалоговом окне. Содержимое файла FXML анализируется, чтобы убедиться, что добавляемый компонент является действительным и самодостаточным.
В диалоговом окне «Импорт» выберите или отмените выбор элементов из списка элементов, которые вы можете импортировать.
Нажмите Импортировать компоненты. Импортированные элементы добавляются в пользовательский раздел панели «Библиотека». Их можно использовать немедленно и они сохраняются в библиотеке даже после перезапуска Scene Builder.
Обратите внимание, что SceneBuilder также поддерживает импорт компонентов на основе FXML, а не просто компонентов с прямым кодом. В этом ответе обсуждается только импорт компонентов кода, которые не содержат FXML.
Пример использования импортированного компонента
Вот пользовательский компонент поля поиска, который я импортировал в SceneBuilder, используя метод, описанный выше.
Верхняя панель поиска находится на панели дизайна Scene Builder, нижняя панель поиска - это результат использования функции предварительного просмотра Scene Builder и поиска счастья.
Образец кода, сгенерированного SceneBuilder
Файл fxml, который был сгенерирован SceneBuilder на основе дизайна, включен сюда. Обратите внимание, что это была просто тестовая сцена, которую я создал с помощью SceneBuilder для тестирования уже импортированного компонента - он не был частью самого процесса импорта компонента.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.text.*?>
<?import org.jewelsea.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children>
<Label text="Search Field Import Test">
<font>
<Font size="16.0" />
</font>
</Label>
<SearchField />
</children>
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
</VBox>
Образец (импортируемый) код компонента
Код для окна поиска, которое было импортировано:
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
);
}
}
Предварительные условия для компонентов
Для того, чтобы процесс работал, вам нужно убедиться в следующем:
- Ваш класс компонентов расширяет узел.
- Ваш класс компонента имеет конструктор без аргументов.
- Класс вашего компонента и конструктор аргументов не являются публичными.
- Ваш класс компонента находится в пакете (например, org.jewelsea) - у него не может быть никакого набора пакетов.
- Класс вашего компонента упакован в файл JAR, который был импортирован в SceneBuilder, как описано выше.
Поиск неисправностей
Если у вас возникают проблемы с импортом JAR, после попытки импорта JAR вы можете использовать описанную ниже функцию анализа JAR, чтобы помочь в устранении неполадок (которые могут помочь или могут просто предоставить некоторую загадочную информацию, чтобы сбить вас с толку).
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- javafx Щелкните правой кнопкой мыши в JavaFX?
- javafx Создание иконки на рабочем столе с использованием JWS JNLP для приложения JavaFX
- javafx Динамическое / мгновенное изменение размера в JavaFX
- javafx Каков рекомендуемый способ сделать числовое TextField в JavaFX?
- javafx Интеграция JavaFX 2.0 WebView в приложение Swing Java SE 6
- fxml Как разместить кнопку (или любой элемент GUI) в сцене JavaFX?
- fxml Какой ChoiceBox-Event выбрать?
- fxml JavaFX-CSS по умолчанию
- fxml Можно ли импортировать классы в блок FXML <fx: script> (JavaFX-2)
- fxml Передача параметров JavaFX FXML
- scenebuilder Установите ширину и высоту сцены
- scenebuilder JavaFX сцены строитель вопросы
- scenebuilder JavaFX - предоставление WebView URL-адреса с помощью Scene Builder или NetBeans
- scenebuilder Изображения, импортированные в конструктор сцен, не отображаются при выполнении в сетевых компонентах
- scenebuilder В JavaFX & Scene Builder как открыть новое окно при нажатии кнопки?