如何在我的自定义布局(VBox,HBox等)元素中获取用fxml编写的所有childs标签

时间:2019-01-19 06:56:06

标签: java javafx-8 fxml

我正在尝试在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>

所以,当我运行代码时,这是我的输出:

output

有我的UI: UI_output

0 个答案:

没有答案