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

标签 java javafx

我清除了所有子项的网格 Pane ,然后再次将子项添加到网格 Pane 中,但它说存在重复项。

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)

最佳答案

这是因为父类的 onProposeChange 方法中的代码

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

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

关于JavaFX 8 getChildren().clear() 之后重复子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36862282/

相关文章:

java - 防止写入默认属性值 JAXB

javafx-2 - 从 javafx 平台运行后返回结果

java - 数组中的对数和

java - 从 Java 打开和关闭应用程序

java - 如何关闭打开的图像,java/javafx

java - Gradle 测试执行器因非零退出值 1 而失败(IntelliJ Idea 默认 Gradle[7.4.1]/JavaFX[17.0.1] 版本)

java - 按下回车键后,提交输入并移至另一个项目

java - 等待 JavaFX 应用程序线程完成事件处理?

java - 使用 Gson 解析没有键的嵌套 JSON 对象

java - 从存储中检索以字符串开头的文件