从MainApp如何在JavaFX中的另一个控制器中显示fx:id中的内容

从MainApp如何在JavaFX中的另一个控制器中显示fx:id中的内容,javafx,controller,Javafx,Controller,我正在通过我的主应用程序加载FXML文件列表。但我在使用FX:ID显示选项卡窗格内部时遇到问题。此选项卡窗格位于borderPane下。我可以访问边框窗格的中心,但无法访问其下方的选项卡窗格 这是我的设置 In my start: @Override public void start(Stage primaryStage) { this.primaryStage = primaryStage; initRootLayo

我正在通过我的主应用程序加载FXML文件列表。但我在使用FX:ID显示选项卡窗格内部时遇到问题。此选项卡窗格位于borderPane下。我可以访问边框窗格的中心,但无法访问其下方的选项卡窗格

这是我的设置

In my start:

     @Override
        public void start(Stage primaryStage) {
            this.primaryStage = primaryStage;
            initRootLayout();
            showPersonOverview();
        }
In my init 

        public void initRootLayout() {
                try {
                    FXMLLoader loader = new FXMLLoader();
                    loader.setLocation(MainApp.class
                            .getResource("view/RootLayout.fxml"));
  //Note this line, I am setting up my rootLayout to be the 
  //mainBorderPane, but I want it to be an AnchorePane under the main
 //BorderPane
                    rootLayout = (BorderPane) loader.load();
                    Scene scene = new Scene(rootLayout);
                    primaryStage.setScene(scene);

                    RootLayoutController controller = loader.getController();
                    controller.setMainApp(this);

                    primaryStage.show();
                } catch (IOException e) {
                    e.printStackTrace();
                }
这就是我的问题所在。我无法在上面提到的选项卡窗格中显示此内容

public void showPersonOverview() {
        try {
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("view/PersonOverview.fxml"));
            AnchorPane personOverview = (AnchorPane) loader.load();
           //Here I am displaying the personOverview inside the main boarderPane
            rootLayout.setCenter(personOverview);

            PersonOverviewController controller = loader.getController();
            controller.setMainApp(this);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

您的RootLayoutController有一个对选项卡窗格的引用,因此从根控制器定义选项卡窗格的访问器方法,并在您想要添加新选项卡时使用该方法

// Store a reference to your root controller in your application.
RootLayoutController rootController;
...

// in initRootLayout()
...
rootController = loader.getController();
...

// in showPersonOverview()
...
AnchorPane personOverview = (AnchorPane) loader.load();
rootController.getTabPane().getTabs().add(
    new Tab("Person Overview", personOverview)
);
...
rootController只是:

@FXML tabPane;

public TabPane getTabPane() {
    return tabPane;
}
使用节点查找的替代解决方案


或者,您可以使用基于css id选择器的use函数,但是,一般来说,使用如上所述的引用可能比查找更好,因为引用是类型安全的,并且不受css查找的运行时变化的影响。CSS查找有时仅在向场景添加元素后才能按预期工作。

rootController.getTabPane().getTabs()我没有看到getTabs?你是说格奇登吗?我们有@FXML选项卡窗格。我们通过getTabPane得到的。GetTab不是为我填充的。不,我不是指
getChildren()
TabPane
有一个方法,这就是我在本例中使用的方法。如果你找到了一个适合你的替代方案,那就太好了。是的,它正在发挥作用。它一直在我面前:)我得到了控制器的手柄和TabPane的手柄,但我一直盯着它,说我该怎么处理你。。。。。。谢谢你的帮助!!!