2

我试图弄清楚是否有办法获得对给定节点的 FXML 的引用。

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

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

我想保存打开了哪些视图,以便下次打开窗口时可以重新启动它们。像这样的东西:

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

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

谢谢。

4

1 回答 1

1

从 fxml 加载节点时,将相关的 fxml 信息存储在节点userData中,然后在需要知道该节点与哪个 fxml 相关时查找 userdata。

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....
    }
}
于 2015-01-09T00:22:24.163 回答