如何删除窗格javafx上的组内的单个节点

时间:2016-02-09 05:47:42

标签: java javafx-8 nodes pane

我在编程中遇到了障碍。我在窗格上有一组弧的数组(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()。删除(选定)部分代码有关。任何有关这方面的帮助将不胜感激。是否有另一种方法可以摆脱节点而不引用父节点?

2 个答案:

答案 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