从MainApp如何在JavaFX中的另一个控制器中显示fx:id中的内容
我正在通过我的主应用程序加载FXML文件列表。但我在使用FX:ID显示选项卡窗格内部时遇到问题。此选项卡窗格位于borderPane下。我可以访问边框窗格的中心,但无法访问其下方的选项卡窗格 这是我的设置从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
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的手柄,但我一直盯着它,说我该怎么处理你。。。。。。谢谢你的帮助!!!