我在编程中遇到了障碍。我在窗格上有一组弧的数组(HE.getDatabase())是一组弧的数组。我试图循环它们并删除任何填充黑色的弧。如果我尝试将它们设置为绿色,则它会起作用,并且每个具有BLACK填充的Arc将使用相同的循环变为绿色。喜欢这个:
main.getDeleteSelected().setOnAction(b -> {
for( int i=0; i < HE.getDatabase().size(); i++){
for(Node one: HE.getDatabase().get(i).getChildren()){
if (((Arc) one).getFill() == Color.BLACK){
((Arc) one).setFill(Color.GREEN);
}
}
}
});
但是如果我尝试删除Arc,它一次只能删除指定操作上的一个或两个。像这样:
main.getDeleteSelected().setOnAction(b -> {
for( int i=0; i < HE.getDatabase().size(); i++){
for(Node one: HE.getDatabase().get(i).getChildren()) {
if (((Arc) one).getFill() == Color.BLACK){
HE.getDatabase().get(i).getChildren().remove(one);
}
}
}
});
我必须多次按下菜单项以消除所有黑色填充弧。我非常确定它与group.getChildren()。删除(选定)部分代码有关。任何有关这方面的帮助将不胜感激。是否有另一种方法可以摆脱节点而不引用父节点?
答案 0 :(得分:1)
你可以做到
for (Group g : HE.getDatabase()) {
g.getChildren().removeIf(node -> ((Arc)node).getFill() == Color.BLACK);
}
答案 1 :(得分:0)
答案就在这里。您无法遍历要删除的列表。 How Iterator's remove method actually remove an object