嘿,这里的编程学生。

我有一个JavaFX应用程序。我有一个窗格,我想从中删除所有矩形。这是代码:

public Pane yard = new Pane();
...
for(int i = 0; i < yard.getChildren().size(); i++)
{
    if(yard.getChildren().get(i) instanceof Rectangle)
    {
        yard.getChildren().remove(i);
    }
 }


有时效果很好。其他时候,它根本无法删除任何内容。谢谢您的帮助。

最佳答案

这是因为您正在for循环中调用remove。你不能那样做。如果for循环以10个条目开头,则位置6处的项目可能是一个以其开头的矩形。但是,如果您删除列表中的第5个条目,则位置6处的内容将位于位置5处,并被跳过。

例:

yard.getChildren[0] = square
yard.getChildren[1] = square
yard.getChildren[2] = rectangle
yard.getChildren[3] = rectangle.


您会看到索引2处的项将被删除,这意味着yard.getChildren的大小现在为3。此时您的计数器i也将为3。因此,for循环将停止,并且最后一个矩形将不会被删除。

09-05 01:40