Я пытаюсь создать свои собственные пользовательские компоненты в JavaFx и использовать их в файле FXML, но внутри своего пользовательского компонента я могу получить все дочерние теги (вложенные компоненты), записанные в файле fxml.
Например:
У меня есть свои пользовательские компоненты (класс): «Форма», это расширение от VBox, и у меня есть файл fxml, где я реализую свои пользовательские компоненты. Итак, мне нужно получить в моем объекте «Form» все дочерние элементы «TextField» и управлять ими.
Form.java
package ui.control;
import javafx.scene.layout.VBox;
public class Form extends VBox {
public Form (){
System.out.println(getChildren().size());
}
}
В этом случае мне просто нужно показать общее количество TextField внутри формы.
Test.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<?import ui.control.Form?>
<VBox
prefHeight="400.0"
prefWidth="600.0"
spacing="10.0"
xmlns="http://javafx.com/javafx/8.0.171"
xmlns:fx="http://javafx.com/fxml/1" >
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<Form fx:id="User_Form">
<TextField promptText="First Name"/>
<TextField promptText="Last Name"/>
<TextField promptText="Email"/>
</Form>
</children>
</VBox>
Я также пробую файл fxml таким образом (используя дочерние теги) и получаю тот же результат.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.Insets?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.VBox?>
<?import ui.control.Form?>
<VBox prefHeight="400.0" prefWidth="600.0" spacing="10.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" >
<padding>
<Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
</padding>
<children>
<Form fx:id="User_Form">
<children>
<TextField promptText="First Name"/>
<TextField promptText="Last Name"/>
<TextField promptText="Email"/>
</children>
</Form>
</children>
</VBox>
Итак, когда я запускаю свой код, это мой вывод:
выход
И есть мой пользовательский интерфейс:
UI_output