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

Java 将重复对象作为新行添加到GridPane,java,javafx,javafx-8,gridpane,Java,Javafx,Javafx 8,Gridpane,我想根据文本字段中的输入编号动态添加新行。我已经在fxml(场景生成器)中在可见范围之外准备好了这一行(文本字段和组合框) 因此,我引用了我要添加的这些对象: @FXML private ComboBox fieldType; @FXML private TextField fieldName; 根据其他文本字段中的数字,我将向gridPane添加行: for (int i = 0; i < newRows; i++) { grid.addRow(grid.impl_getRo

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

因此,我引用了我要添加的这些对象:

@FXML
private ComboBox fieldType;

@FXML
private TextField fieldName;
根据其他文本字段中的数字,我将向gridPane添加行:

for (int i = 0; i < newRows; i++) {
    grid.addRow(grid.impl_getRowCount(), fieldName, fieldType);
}
我想我会像这样克隆这些对象:

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
然而,我得到了同样的例外


有可能吗?谢谢

您的
封口机
无法正常工作

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

((CloningMachine)new CloningMachine().setNode(n).clone()).getNode()
这只是获取
n
的一种复杂方式,即

((CloningMachine)new CloningMachine().setNode(n).clone()).getNode() == n
始终生成
true

包含以下关于实现
clone
的句子

通常,这意味着复制构成被克隆对象内部“深层结构”的任何可变对象,并用对副本的引用替换对这些对象的引用


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

您的
封口机
无法正常工作

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

((CloningMachine)new CloningMachine().setNode(n).clone()).getNode()
这只是获取
n
的一种复杂方式,即

((CloningMachine)new CloningMachine().setNode(n).clone()).getNode() == n
始终生成
true

包含以下关于实现
clone
的句子

通常,这意味着复制构成被克隆对象内部“深层结构”的任何可变对象,并用对副本的引用替换对这些对象的引用


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

不能将节点添加到场景图中两次。您需要创建ComboBox和TextField的新实例,并将其添加到新行。如果需要,您可以从已经存在的节点复制值。最后,我创建了新实例,如您所说。您不能将节点添加到场景图中两次。您需要创建ComboBox和TextField的新实例,并将其添加到新行。如果需要的话,你可以从已经存在的节点复制这些值。最后,我像你说的那样创建了新的实例。