gpt4 book ai didi

java - 将重复对象添加到 GridPane 作为新行

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:28 25 4
gpt4 key购买 nike

我想根据文本字段中的输入数字动态添加新行。我已在可见范围之外的 fxml(场景生成器)中准备了这一行(textField 和组合框)。

所以我引用了我想要添加的这些对象:

@FXML
private ComboBox fieldType;

@FXML
private TextField fieldName;

根据其他文本字段的数字,我将行添加到 gridPane:

for (int i = 0; i < newRows; i++) {
grid.addRow(grid.impl_getRowCount(), fieldName, fieldType);
}

我得到这个异常:

Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Children: duplicate children added: parent = Grid hgap=0.0, vgap=5.0, alignment=TOP_LEFT

我想我会像这样克隆这些对象:

public class CloningMachine implements Cloneable {

private Node node;

public CloningMachine() {
}

public CloningMachine setNode(Node node) {
this.node = node;
return this;
}

public Node getNode() {
return node;
}

protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
<小时/>
for (int i = 0; i < newRows; i++) {
grid.addRow(grid.impl_getRowCount(), ((CloningMachine)new CloningMachine().setNode(fieldName).clone()).getNode(), ((CloningMachine)new CloningMachine().setNode(fieldType).clone()).getNode());
}

但是我遇到了同样的异常。

有可能以某种方式做到这一点吗?谢谢

最佳答案

您的CloningMachine无法按预期工作。

Object.clone 返回对象的副本,其中所有数据(包括任何引用)都包含相同的数据。这意味着

((CloningMachine)new CloningMachine().setNode(n).clone()).getNode()

只是获取n的复杂方式,即

((CloningMachine)new CloningMachine().setNode(n).clone()).getNode() == n

总是产生true

The javadoc of Object.clone包含以下关于实现clone的句子。

Typically, this means copying any mutable objects that comprise the internal "deep structure" of the object being cloned and replacing the references to these objects with references to the copies.

因此,要正确实现克隆,您需要“手动”复制Node(即使用构造函数创建一个新节点并分配所有相关属性)。没有简单的方法可以解决这个问题。

关于java - 将重复对象添加到 GridPane 作为新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35157701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com