2017-07-07 28 views
1

我在运行时将节点添加回AnchorPane时遇到问题。JavaFX在运行时间期间从锚板清除所有节点并添加新节点

我想要做的是当用户点击一个按钮,当前节点存储在ObservableList<Node>,然后清除AnchorPane。在此之后,我需要在那里添加新的节点。然后,当用户完成时,他们点击另一个按钮,我保存的ObservableList应该被添加回AnchorPane

基本上我试图显示一个客户信息表单,当用户点击“客户”按钮,然后显示那里开始的节点。

有没有不同的方法来做到这一点?没有显示在另一个窗口? 我用.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); 
} 
+0

我感到困惑你的问题,但这样做后'middlePaneContent = middlePane.getChildren();'然后middlePaneContent和middlePane的孩子都指向了同样的事情。如果你采取行动,另一个也会改变 - 你需要克隆数据吗? –

+0

是的,你是对的,我将如何制作它的副本而不是指向它? –

+0

不知道你的类看起来像什么,但可能实例化新的或可能'克隆'将工作 –

回答

1

你只需存储middlePaneContentmiddlePane的孩子列表的引用。两者都指向相同的列表。清除其中一个将清除“其他”。

使用另一张List来存储数据:

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(); 
} 
+0

谢谢,这是我第一次这样做,但在第二次点击它给了我这个错误: java.lang.IllegalArgumentException:孩子:添加重复的孩子:parent = AnchorPane [id = Content] –

+0

没关系,在添加middlePane孩子之前,我并没有清理middlePaneContent。非常感谢,现在完美。 –

相关问题