我试图找出是否有办法获得给定节点的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....
}
}
我似乎无法找到一种方法来恢复原状......保持有一种方法,除了在另一个地方手动跟踪。
感谢。
答案 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....
}
}