JavaFX 8在getChildren()之后复制子项.clear()

时间:2016-04-26 10:29:12

标签: java javafx

我清除所有孩子的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)

1 个答案:

答案 0 :(得分:1)

这是因为来自父类的onProposedChange方法的代码

childSet.addAll(newNodes);
if (childSet.size() != newLength) {
   throw new IllegalArgumentException(
       constructExceptionMessage(
           "duplicate children added", null));
}

所以你应该从blockBoard中删除重复的节点。 可能你应该使用TableView来做这些事情。