JavaFX清除anchorpane中的所有节点并在运行时添加新节点

JavaFX清除anchorpane中的所有节点并在运行时添加新节点,java,user-interface,javafx,observablelist,Java,User Interface,Javafx,Observablelist,我在运行时将节点添加回AnchorPane时遇到问题 我试图做的是,当用户单击一个按钮时,当前节点存储在可观察列表中,然后清除锚定按钮。在此之后,我需要在那里添加新节点。然后,当用户完成后,他们单击另一个按钮,我保存的ObservableList将被添加回AnchorPane 基本上,当用户单击“customer”(客户)按钮时,我试图显示一个客户信息表单,然后显示要开始的节点 有没有其他方法可以做到这一点?而不在另一个窗口中显示? 我使用了.addAll(),但这不起作用 谢谢 private

我在运行时将节点添加回
AnchorPane
时遇到问题

我试图做的是,当用户单击一个按钮时,当前节点存储在
可观察列表
中,然后清除
锚定按钮
。在此之后,我需要在那里添加新节点。然后,当用户完成后,他们单击另一个按钮,我保存的
ObservableList
将被添加回
AnchorPane

基本上,当用户单击“customer”(客户)按钮时,我试图显示一个客户信息表单,然后显示要开始的节点

有没有其他方法可以做到这一点?而不在另一个窗口中显示? 我使用了
.addAll()
,但这不起作用

谢谢

private ObservableList<Node> middlePaneContent;
@FXML
private AnchorPane middlePane;
@FXML
private void setMiddlePane(){
    middlePaneContent = middlePane.getChildren();
    //middlePane.setVisible(false);
    middlePane.getChildren().clear();
}
@FXML
private void setInspectionToMiddlePane(){
    //middlePane.getChildren().addAll(middlePaneContent);
    middlePane.setVisible(true);
}
私有可观察列表middlePaneContent;
@FXML
私人锚烷;
@FXML
私有void setMiddlePane(){
middlePaneContent=middlePane.getChildren();
//middlePane.setVisible(false);
middlePane.getChildren().clear();
}
@FXML
私有void setInspectionTomidlePane(){
//middlePane.getChildren().addAll(middlePaneContent);
middlePane.setVisible(true);
}

您只是将对
middlePane
子列表的引用存储在
middlePaneContent
中。两者都指向同一个列表。清除其中一个将清除“另一个”

使用另一个
列表
存储数据:

private List<Node> middlePaneContent = new ArrayList<>();

@FXML
private AnchorPane middlePane;

@FXML
private void setMiddlePane(){
    // copy content to another list
    middlePaneContent.clear();
    middlePaneContent.addAll(middlePane.getChildren());

    //middlePane.setVisible(false);

    // clear child list
    middlePane.getChildren().clear();
}
私有列表middlePaneContent=newArrayList(); @FXML 私人锚烷; @FXML 私有void setMiddlePane(){ //将内容复制到另一个列表 middlePaneContent.clear(); middlePaneContent.addAll(middlePane.getChildren()); //middlePane.setVisible(false); //清除子列表 middlePane.getChildren().clear(); }
我对你的问题感到困惑,但在做了
middlePaneContent=middlePane.getChildren()之后
然后middlePaneContent和middlePane的子对象指向同一个对象。如果你对其中一个进行操作,另一个也会改变-你需要
克隆数据吗?是的,你是对的,我如何复制它而不是指向它?不确定你的类是什么样子,但可能实例化新类,或者
克隆
会起作用谢谢,这在我第一次这么做时就起作用了,但在第二次单击时,它给了我以下错误:java.lang.IllegalArgumentException:Children:replicate childrend added:parent=AnchorPane[id=Content]更不用说在添加middlePane子项之前我没有清除middlePaneContent。非常感谢,现在效果很好。