用FXML和Java代码设计JavaFX视图



我已经使用FXML创建了JavaFX项目的视图。我想知道是否有可能在控制器类中添加更多的项目到视图?

例如,我如何在我的控制器文件中添加另一组文本和TextField ?

FXML

<AnchorPane prefHeight="400.0" prefWidth="228.0">
   <children>
      <Text layoutY="10.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Selected User:" GridPane.rowIndex="0" />
      <Text layoutY="45.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Username :" GridPane.rowIndex="1" />
      <TextField fx:id="username" layoutY="55.0" GridPane.rowIndex="2" />
      <Text layoutY="100.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Address :" GridPane.rowIndex="3" />
      <TextField fx:id="address" layoutY="110.0" GridPane.rowIndex="4" />
      <Text layoutY="155.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Web Page :" GridPane.rowIndex="5" />
      <TextField fx:id="WP" layoutY="165.0" GridPane.rowIndex="6" />
      <Text layoutY="210.0" strokeType="OUTSIDE" strokeWidth="0.0" text="State :" GridPane.rowIndex="7" />
      <Text layoutY="265.0" strokeType="OUTSIDE" strokeWidth="0.0" text="Login Name :" GridPane.rowIndex="9" />
      <TextField fx:id="login_Name" layoutY="275.0" GridPane.rowIndex="10" />
      <Button fx:id="btnSave" layoutX="50.0" layoutY="320.0" mnemonicParsing="false" onAction="#btnSaveClicked" text="Save" />
      <Button fx:id="btnSave" layoutX="35.0" layoutY="365.0" mnemonicParsing="false" onAction="#btnDeleteUserClicked" text="Delete User" />
      <Button fx:id="btnAddNew" layoutX="30.0" layoutY="410.0" mnemonicParsing="false" onAction="#btnAddeNewClicked" text="Add New User" />
      <TextField fx:id="state" layoutX="-2.0" layoutY="222.0" />
   </children>
</AnchorPane>

在FXML中添加新节点

我会说,除非有很好的理由不这样做,否则您应该始终向FXML添加新节点。向FXML添加节点就像在现有的FXML中添加额外的行一样简单。

<AnchorPane prefHeight="400.0" prefWidth="228.0">
   <children>
      ...
      <Text fx:id="newText"/>
      <TextField fx:id="newTextField"/>
   </children>
</AnchorPane>

这些新节点将立即反映在场景图中,您可以使用它们的fx:id将它们绑定到控制器。

控制器新增节点

首先,您应该为AnchorPane定义一个fx:id,以便在控制器中访问它。

<AnchorPane fx:id="anchorPane" prefHeight="400.0" prefWidth="228.0">
   <children>
      ...
   </children>
</AnchorPane>

您可以定义新的控件并将它们添加到控制器的AnchorPane中。

public class MyController implements Initializable {
    @FXML
    private AnchorPane anchorPane;
    ...
    public void intialize() {
       ...
       Text newText = new Text("Some Text");
       TextField newTextField = new TextField();
       anchorPane.getChildren().addAll(newText, newTextField);
       ...
    }
}

相关内容

  • 没有找到相关文章

最新更新