JavaFX 8有从节点获取FXML参考的方法吗?

时间:2015-01-08 23:57:48

标签: javafx-8 fxml fxmlloader

我试图找出是否有办法获得给定节点的FXML的引用。

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

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....
    }
}

我似乎无法找到一种方法来恢复原状......保持有一种方法,除了在另一个地方手动跟踪。

感谢。

1 个答案:

答案 0 :(得分:1)

从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....
    }
}