如何引用另一个场景中的元素

时间:2014-09-17 10:51:29

标签: javafx scenebuilder

我有两个场景,一个是主场景,另一个是巫师。

当用户点击wiz scene上的按钮时,我想在main scene的tabpane中添加一个新标签。

问题是该程序认为我引用了向导场景中的tabPane,而它实际上是放在主场景中。

所以我的问题是,如何引用另一个场景中的元素?(实际上是另一个FXML文档)

注意:我正在使用场景构建器

顺便说一下,我使用How do I access a UI element from another controller class in JavaFX?

开始工作

但我明白这不是推荐的方法,那是什么?

可能是我接近这一切都错了..但我想要的是一个新窗口,里面有一个按钮,当用户按下新窗口内的按钮时,应该在主窗口添加一个新标签窗口。

1 个答案:

答案 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();
    }
}