【问题标题】:JavaFX clearing all nodes from anchorpane and adding new nodes during runtimeJavaFX 从锚窗格中清除所有节点并在运行时添加新节点
【发布时间】:2017-07-07 00:34:16
【问题描述】:

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

我要做的是当用户单击按钮时,当前节点存储在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);
}

【问题讨论】:

  • 我对你的问题感到困惑,但在做了middlePaneContent = middlePane.getChildren(); 之后,middlePaneContent 和 middlePane 的孩子们都指向同一个东西。如果你对其中一个采取行动,另一个也会发生变化——你需要clone数据吗?
  • 是的,你是对的,我将如何复制它而不是指向它?
  • 不确定你的类是什么样的,但也许实例化新类或者clone 会起作用

标签: java user-interface javafx observablelist


【解决方案1】:

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

使用另一个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();
}

【讨论】:

  • 谢谢,这是我第一次这样做的时候,但在第二次点击时它给了我这个错误:java.lang.IllegalArgumentException: Children: duplicate children added: parent = AnchorPane[id=Content]
  • 没关系,在添加 middlePane 子项之前,我没有清除 middlePaneContent。非常感谢,现在完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2018-12-25
  • 1970-01-01
相关资源
最近更新 更多