Как получить в моем пользовательском элементе Layout (VBox, HBox и т. Д.) Все дочерние теги, записанные в fxml - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь создать свои собственные пользовательские компоненты в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...