JavaFX 8 有没有办法从节点获取 FXML 引用?

JavaFX 8 is there way to get the FXML reference from a Node?

我想知道是否有办法为给定节点获取对 FXML 的引用。

例如,我正在动态加载视图 - 假设我在当前控制器中引用了一个窗格:

private void openView() {
    FXMLLoader loader = new FXMLLoader();
    Parent node = loader.load(this.getClass().getResource("MyView.fxml").openStream());
    pane.getChildren().add(node);
    node.requestFocus();
}

我想保存打开的视图,以便下次打开 window 时重新启动它们。像这样:

private void saveOpenViews() {
    pane.getChildren().forEach(child -> {
        String fxmlLocation = child.getFXML();
        etc....
    }
}

我似乎无法找到一种方法来恢复它以保留打开的内容...希望有一种方法,而不是在另一个地方手动跟踪。

谢谢。

当你从fxml加载节点时,将相关的fxml信息存储在节点userData中,然后当你需要知道该节点与什么fxml相关时查找用户数据。

private void openView() {
    FXMLLoader loader = new FXMLLoader();
    URL fxmlLocation = this.getClass().getResource("MyView.fxml");
    Parent node = loader.load(fxmlLocation.openStream());
    node.setUserData(fxmlLocation);
    pane.getChildren().add(node);
    node.requestFocus();
}

private void saveOpenViews() {
    pane.getChildren().forEach(child -> {
        URL fxmlLocation = (URL) child.getUserData();
        etc....
    }
}