【发布时间】:2016-04-26 10:29:12
【问题描述】:
我正在清除所有孩子的 Gridpane,然后再次将孩子添加到 Gridpane 但它说有重复项。
public void render(){
boardPane.getChildren().clear();
for(int x = 0; x < xSize; x++){
for(int y = 0; y < ySize; y++){
boardPane.add(blockBoard[x][y], x, y);
}
}
}
blockBoard[x][y] 包含在每个渲染周期被替换的对象。
Exception in thread "JavaFX Application Thread"
java.lang.IllegalArgumentException: Children:
duplicate children added: parent = Grid hgap=0.0, vgap=0.0,
alignment=TOP_LEFT
at javafx.scene.Parent$2.onProposedChange(Parent.java:454)
at com.sun.javafx.collections.VetoableListDecorator.add
(VetoableListDecorator.java:206)
at javafx.scene.layout.GridPane.add(GridPane.java:965)
at tetris.Game.render(Game.java:121)
【问题讨论】:
-
您确定
blockBoard本身不包含重复项吗? -
数组也可以有重复项???它们包含平铺对象,例如 blockBoard[x][y] = new Tile();有很多新的 Tile();数组中的对象。
-
是的。没有什么能阻止您将相同的对象两次添加到数组中。
-
但是如果我在数组中有数千个相同的新 Tile() 对象为什么会出现问题,只要它们位于不同的网格窗格坐标中,javafx 就不应该反对添加它们?我总是在forloop中给出不同的坐标(x,y)
-
你在某处做了一些奇怪的事情:要么在数组的创建中,要么在
Tile类的定义中。如果您需要帮助完全了解正在发生的事情,您可能需要发布minimal reproducible example。