从 FXML 添加锚窗格并将其交换到当前场景
Adding an anchorpane from FXML and swapping it into current scene
我正在处理的项目中遇到了一些问题。我希望将我的 fxml 内容加载到现有锚定窗格中并在单击 "next" 按钮时显示它,我还希望使用 "back" 按钮将锚定窗格设置为上一个 fxml 文件。
我遇到的问题是它只工作了一次。如果单击下一步,它会显示正确的 fxml 内容,但是如果按下后退,它会正确运行一次,第二次显示的 window 不包含任何内容:
@FXML
AnchorPane scenePane, allContent;
@FXML
public void handleNextAction() {
try {
scenePane.getChildren().clear();
AnchorPane newvalscene = (AnchorPane) FXMLLoader.load(getClass().getResource("ProjectDetails.fxml"));
scenePane.getChildren().setAll(newvalscene.getChildren());
} catch (IOException ex) {
Logger.getLogger(NewProjectController.class.getName()).log(Level.SEVERE, null, ex);
}
}
@FXML
public void handleBackAction() {
try {
// allContent.getChildren().clear();
AnchorPane newvalscene = (AnchorPane) FXMLLoader.load(getClass().getResource("newProjectWindow.fxml"));
allContent.getChildren().setAll(newvalscene.getChildren());
} catch (IOException ex) {
Logger.getLogger(NewProjectController.class.getName()).log(Level.SEVERE, null, ex);
}
}
我已经尝试清除锚窗格的内容,但这只会导致锚窗格为空,第二次按下后退按钮时没有从 FXML 加载任何内容。
注意我试过调试这个但是因为没有实际错误很难追踪而且 netbeans 似乎不会向我显示包含所有要渲染节点的变量 newvalscene 的内容,但是 println 显示它确实包含我希望显示的 Vbox 和子项。
如有任何帮助,我们将不胜感激。
为什么所有这些 SIr 都是有原因的?
scenePane.getChildren().clear();
scenePane.getChildren().setAll(newvalscene.getChildren());//why replace?
allContent.getChildren().setAll(newvalscene.getChildren());//why replace ?
请试试这个
如果你真的有这个
AnchorPane scenePane, allContent;
scenePane 是您的 Parent 或 Root,您可以像
这样嵌套项目
scenePane.getCHildren().add(child);
与您的代码有关
AnchorPane nextvalscene,backvalscene;
public void handleNextAction() {
try {
//scenePane.getChildren().clear(); remove this
if(nextvalscene == null){
nextvalscene = (AnchorPane) FXMLLoader.load(getClass().getResource("ProjectDetails.fxml"));
scenePane.getChildren().add(newvalscene);//change setAll to add and use the child itself
AnchorPane.setLeftNode(newvalscene, 0.0);//set constraint for your newvalscene AnchorPane
//do that for the rest esp top
}
nextvalscene.toFront();
} catch (IOException ex) {
Logger.getLogger(NewProjectController.class.getName()).log(Level.SEVERE, null, ex);
}
}
对 handleBackAction 做同样的事情
Logic 是你的 parent 或根场景是 AnchorPane 它可以包含 children,所以不需要替换它的所有 children,你可以通过约束将它们全部隐藏起来在布局参数上,并更改其 re-ordering.
除非你有理由将你的 Anchorpane 的 children 复制到你的场景 children 列表,我想我错过了
希望对您有所帮助
我正在处理的项目中遇到了一些问题。我希望将我的 fxml 内容加载到现有锚定窗格中并在单击 "next" 按钮时显示它,我还希望使用 "back" 按钮将锚定窗格设置为上一个 fxml 文件。
我遇到的问题是它只工作了一次。如果单击下一步,它会显示正确的 fxml 内容,但是如果按下后退,它会正确运行一次,第二次显示的 window 不包含任何内容:
@FXML
AnchorPane scenePane, allContent;
@FXML
public void handleNextAction() {
try {
scenePane.getChildren().clear();
AnchorPane newvalscene = (AnchorPane) FXMLLoader.load(getClass().getResource("ProjectDetails.fxml"));
scenePane.getChildren().setAll(newvalscene.getChildren());
} catch (IOException ex) {
Logger.getLogger(NewProjectController.class.getName()).log(Level.SEVERE, null, ex);
}
}
@FXML
public void handleBackAction() {
try {
// allContent.getChildren().clear();
AnchorPane newvalscene = (AnchorPane) FXMLLoader.load(getClass().getResource("newProjectWindow.fxml"));
allContent.getChildren().setAll(newvalscene.getChildren());
} catch (IOException ex) {
Logger.getLogger(NewProjectController.class.getName()).log(Level.SEVERE, null, ex);
}
}
我已经尝试清除锚窗格的内容,但这只会导致锚窗格为空,第二次按下后退按钮时没有从 FXML 加载任何内容。
注意我试过调试这个但是因为没有实际错误很难追踪而且 netbeans 似乎不会向我显示包含所有要渲染节点的变量 newvalscene 的内容,但是 println 显示它确实包含我希望显示的 Vbox 和子项。
如有任何帮助,我们将不胜感激。
为什么所有这些 SIr 都是有原因的?
scenePane.getChildren().clear();
scenePane.getChildren().setAll(newvalscene.getChildren());//why replace?
allContent.getChildren().setAll(newvalscene.getChildren());//why replace ?
请试试这个
如果你真的有这个
AnchorPane scenePane, allContent;
scenePane 是您的 Parent 或 Root,您可以像
这样嵌套项目scenePane.getCHildren().add(child);
与您的代码有关
AnchorPane nextvalscene,backvalscene;
public void handleNextAction() {
try {
//scenePane.getChildren().clear(); remove this
if(nextvalscene == null){
nextvalscene = (AnchorPane) FXMLLoader.load(getClass().getResource("ProjectDetails.fxml"));
scenePane.getChildren().add(newvalscene);//change setAll to add and use the child itself
AnchorPane.setLeftNode(newvalscene, 0.0);//set constraint for your newvalscene AnchorPane
//do that for the rest esp top
}
nextvalscene.toFront();
} catch (IOException ex) {
Logger.getLogger(NewProjectController.class.getName()).log(Level.SEVERE, null, ex);
}
}
对 handleBackAction 做同样的事情
Logic 是你的 parent 或根场景是 AnchorPane 它可以包含 children,所以不需要替换它的所有 children,你可以通过约束将它们全部隐藏起来在布局参数上,并更改其 re-ordering.
除非你有理由将你的 Anchorpane 的 children 复制到你的场景 children 列表,我想我错过了
希望对您有所帮助