动态添加 TextField 到 javafx 场景

1 java javafx

我是 JavaFX 的新手。我想与我的场景互动。
例如:当我单击一个按钮时,我在其中添加了一个新的 Button、Textfield ..。然而,我搜索但没有找到满意的答案!

我的 fxml 文件:

 <children>
    <Label layoutX="59.0" layoutY="83.0" text="message Type"/>
    <Button layoutX="157.0" layoutY="354.0" mnemonicParsing="false" onAction="#goBack" text="Revenir à la page precedente" />
    <Button layoutX="348.0" layoutY="354.0" mnemonicParsing="false" onAction="#goToDash" text="Go To Screen3" />
    <Button layoutX="375.0" layoutY="84.0" mnemonicParsing="false" onAction="#AddTextfiled" prefHeight="25.0" prefWidth="28.0" text="+" />
    <Button layoutX="375.0" layoutY="84.0" mnemonicParsing="false" onAction="#RemoveTextfield" prefHeight="25.0" prefWidth="28.0" text="-" />
    <TextField layoutX="212.0" layoutY="84.0" />
  </children>
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@FXML
private void goBack1(ActionEvent event){
   myController.setScreen(ScreensFramework.screenPreviousID);
}

@FXML
private void goToDash(ActionEvent event){
   myController.setScreen(ScreensFramework.screenDashID);
}
@FXML
private void AddTextField(ActionEvent event)  {     
 //add textfield on click}

@FXML
private void RemoveTextField(ActionEvent event)  {     
 //remove textfield on click
Run Code Online (Sandbox Code Playgroud)

}

Wil*_*lBD 5

要实现目标,您需要为场景中可以带孩子的容器提供一个 fx:id。假设您有一个定义如下的堆栈窗格:

@FXML
    private VBox pane_main_grid;
Run Code Online (Sandbox Code Playgroud)

其中,pane_main_grid 在 .fxml 文件中定义为 fx:id。伟大的。

现在,使用您前面提到的代码。

@FXML
private void AddTextField(ActionEvent event)  {     
 TextField newField = new TextField();
 pane_main_grid.getChildren().add(newField);}
Run Code Online (Sandbox Code Playgroud)

我将把删除留给你,你需要做的就是想出一种方法来跟踪你创建的文本字段,然后当你想删除一个时,你可以做一些类似的事情 pane_main_grid.remove({index of text field to remove});

祝你好运!