JavaFX - 管理选项卡之间的对象

时间:2015-09-07 11:41:55

标签: java javafx tabs fxml

我有一个Controller,我们称之为GeneralController,它创建一个TabPane以及两个新标签。新标签都有自己的控制器,“Tab1Controller”和“Tab2Controller”。 在GeneralController中,我创建了一个Object“MyObject”。此Object包含一些数据,可以在Tab1Controller和Tab2Controller中进行修改。 到目前为止,非常好。

“Tab1Controller”和“Tab2Controller”都有一个initController函数,它将“MyObject”作为参数。这样,我可以使用“MyObject”将两个控制器初始化。

GeneralController:

// Similar function for Tab2Controller
private void createTab1(ObjectProperty<MyObject> myObject) {
    try {
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(Main.class.getResource("path/to/tab1.fxml"));

        Tab tab1 = (Tab) loader.load();

        Tab1Controller tab1Controller = loader.getController();
        tab1Controller.initController(myObject)

        generalTabs.getTabs().add(tab1);
    }
    catch (IOException ex) {
        ex.printStackTrace();
    }
}

Tab1Controller / Tab2Controller:

public void initController(ObjectProperty<MyObject> myObject) {
    this.myObject = myObject;
}

我的问题出现了: 我如何以最佳方式确保我在Tab1Controller和Tab2Controller中保留最新的标签,控件,节点,图表等等?

在Tab1Controller和Tab2Controller中创建setOnSelectionChanged-Listener并更新所有可能的数据更改是否合理?

1 个答案:

答案 0 :(得分:0)

一个好的解决方案是使用observer pattern。 如果您需要一个好的例子,请查看this