javafx-启动时初始化选项卡(选项卡窗格的)

javafx-启动时初始化选项卡(选项卡窗格的),java,javafx,Java,Javafx,我正在使用eclipse和scenebuilder 我已将主窗口定义如下: 我想用元素(在不同的fxml文件中定义的元素)的X(X在运行时计算)来定义“传出消息”选项卡 创建主窗口时: private Stage primaryStage; private AnchorPane rootLayout; public void start(Stage primaryStage) { this.primaryStage = primaryStage; this.primar

我正在使用eclipse和scenebuilder

我已将主窗口定义如下:

我想用元素(在不同的fxml文件中定义的元素)的X(X在运行时计算)来定义“传出消息”选项卡

创建主窗口时:

private Stage primaryStage;   
private AnchorPane rootLayout;

public void start(Stage primaryStage) {
    this.primaryStage = primaryStage;
    this.primaryStage.setTitle("ABC");

    try {
        // Load root layout from fxml file.
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(MainApp.class.getResource("MainLayout.fxml"));
        rootLayout = (AnchorPane) loader.load();

        // Show the scene containing the root layout.
        Scene scene = new Scene(rootLayout);
        primaryStage.setScene(scene);
        primaryStage.show();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
如何更新上述“发送邮件”选项卡

谢谢

您可以在FXML中使用
传出消息
。这将在加载主fxml之前自动加载X个fxml。加载所有incude FXML后,准备并显示
传出消息的FXML

更新

如果元素动态增加/减少,请使用
传出消息的
初始化()
来填充其中的元素,而不是使用

让我们考虑(你可能有你自己的逻辑)你的<代码>输出消息有一个<代码> vbox < /代码>,它将填充动态元素No(BurdPANE在这种情况下),它在<代码> x.fxml 中(你可以有不同的FXML,或者你可以在运行时创建自己的控件并添加它):

pubic类OutgoingMessages控制器实现可初始化{
@FXML
专用VBox VBox;
公共void初始化(java.net.URL位置,java.util.ResourceBundle资源){
//不管你的逻辑是什么,我在考虑一个动态数字

对于(int i=0;i是否
Outgoing Messages
选项卡有自己的
FXML
?我的目的是从X个相同的元素(每个元素都有自己的FXML文件)创建Outgoing message选项卡,我无法使用,因为我在运行时知道X(X可以在begging时为3,然后更改为9,…我已经更新了答案,如果您正在寻找其他东西,请告诉我,这很有帮助。但是如何为不同的选项卡创建不同的控制器?(正确的方法是使用fx:通过场景生成器包括并选择控制器,还是有更好的方法(更好的逻辑解决方案)?在fxml中定义控制器是标准方法。您也可以使用
loader.setController()
通过加载器设置控制器。
pubic class OutgoingMessagesController implements Initializable {

    @FXML
    private VBox vbox;

    public void initialize(java.net.URL location, java.util.ResourceBundle resources) {

        //Whatever your logic is, I am considering a dynamic number here

        for(int i=0; i<dynamicNumber; i++){
            BorderPane borderPane = FXMLoader.load(getClass().getResource("X.fxml"));
            vbox.getChildren.add(borderPane);
        }
    }
}