我有两个场景,一个是主场景,另一个是巫师。
当用户点击wiz scene
上的按钮时,我想在main scene
的tabpane中添加一个新标签。
问题是该程序认为我引用了向导场景中的tabPane,而它实际上是放在主场景中。
所以我的问题是,如何引用另一个场景中的元素?(实际上是另一个FXML文档)
注意:我正在使用场景构建器
顺便说一下,我使用How do I access a UI element from another controller class in JavaFX?
开始工作但我明白这不是推荐的方法,那是什么?
可能是我接近这一切都错了..但我想要的是一个新窗口,里面有一个按钮,当用户按下新窗口内的按钮时,应该在主窗口添加一个新标签窗口。
答案 0 :(得分:0)
JavaFX 8 Tutorial - Part 2: Model and TableView
在本教程about JavaFX中,在控制器中添加一个方法:
/**
* Is called by the main application to give a reference back to itself.
*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
// Add observable list data to the table
personTable.setItems(mainApp.getPersonData());
}
然后执行以下操作:
使用PersonOverviewController连接MainApp
MainApp类必须调用setMainApp(...)方法。这为我们提供了一种访问MainApp对象并获取人员和其他内容列表的方法。用以下内容替换showPersonOverview()方法。它还包含两行:
MainApp.java - 新的showPersonOverview()方法
/**
* Shows the person overview inside the root layout.
*/
public void showPersonOverview() {
try {
// Load person overview.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(MainApp.class.getResource("view/PersonOverview.fxml"));
AnchorPane personOverview = (AnchorPane) loader.load();
// Set person overview into the center of root layout.
rootLayout.setCenter(personOverview);
// Give the controller access to the main app.
PersonOverviewController controller = loader.getController();
controller.setMainApp(this);
} catch (IOException e) {
e.printStackTrace();
}
}