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。非常感谢,现在效果很好。