Javafx 从FXML添加锚烷并将其交换到当前场景

Javafx 从FXML添加锚烷并将其交换到当前场景,javafx,javafx-2,javafx-8,Javafx,Javafx 2,Javafx 8,我在做一个项目时遇到了一些问题。我希望将我的fxml内容加载到现有的anchorpane中,并在单击“下一步”按钮时显示它,我还希望使用“上一步”按钮将anchorpane设置为上一个fxml文件 我遇到的问题是,我只能让它工作一次。如果单击“下一步”,它将显示正确的fxml内容,但是如果按“上一步”,它将正确运行一次,第二次显示的窗口不包含任何内容: @FXML AnchorPane scenePane, allContent; @FXML public void handleNextAct

我在做一个项目时遇到了一些问题。我希望将我的fxml内容加载到现有的anchorpane中,并在单击“下一步”按钮时显示它,我还希望使用“上一步”按钮将anchorpane设置为上一个fxml文件

我遇到的问题是,我只能让它工作一次。如果单击“下一步”,它将显示正确的fxml内容,但是如果按“上一步”,它将正确运行一次,第二次显示的窗口不包含任何内容:

@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和子项


任何帮助都将不胜感激。

先生,为什么会有这些原因

scenePane.getChildren().clear();
scenePane.getChildren().setAll(newvalscene.getChildren());//why replace?

allContent.getChildren().setAll(newvalscene.getChildren());//why replace ?
请试试这个

如果你真的有这个

AnchorPane scenePane, allContent;
而scenePane是您的父级或根级,您可以像

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);
}
}
做同样的把手动作

逻辑是您的父场景或根场景是锚形的,它可以包含子场景,因此无需替换其所有子场景,您可以通过布局参数上的约束将它们全部隐藏在内部,并更改其重新排序

除非你有理由把你的主持人的孩子复制到你的场景孩子列表中,否则我想我错过了


希望对您有所帮助

尝试使用
scene.setRoot(newvalscene)
methodOk我再次尝试了这个方法,没有出现任何错误,但它所做的只是像以前一样使显示为空,但始终是空的…即当按下后退按钮一次而不是两次时,窗口为空…这解决了问题,并使我重新思考如何构建这些窗口。谢谢你的帮助!