我正在尝试在JavaFx中创建自己的自定义组件,并在FXML文件中使用它,但是我可以在我的自定义组件中获取写在fxml文件中的所有childs标签(嵌套组件)。
例如:
我有我的自定义组件(类):“ Form”是从VBox扩展而来的,并且我有一个fxml文件,用于实现我的自定义组件。因此,我需要将所有“ TextField”子级放入我的“ Form”对象中,并管理它们的项。
Form.java
package ui.control;
import javafx.scene.layout.VBox;
public class Form extends VBox {
public Form (){
System.out.println(getChildren().size());
}
}
在这种情况下,我只需要在Form内显示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: UI_output