在JavaFx中,如何从网格窗格中删除特定节点的坐标?

时间:2017-08-20 04:13:55

标签: java javafx

如果我知道我想删除的节点的具体坐标,让我们说“col:3,row:4”,如何删除第3列和第4行中的节点? 我可以在Java中使用内置方法吗?

3 个答案:

答案 0 :(得分:2)

您需要从布局(GridPane)中删除节点(子)

public Node removeNodeByRowColumnIndex(final int row,final int column,GridPane gridPane) {

ObservableList<Node> childrens = gridPane.getChildren();
for(Node node : childrens) {
    if(node instanceof ImageView && gridPane.getRowIndex(node) == row && gridPane.getColumnIndex(node) == column) {
        ImageView imageView=ImageView(node); // use what you want to remove
        gridPane.getChildren().remove(imageView);
        break;
    }
  } 
   }

答案 1 :(得分:1)

没有使用行列坐标从 GridPane 中删除子节点的内置方法。相反,您应该使用 getChildren() 方法返回列表上的索引。

因此,您很可能应该制定如何将节点添加到 GridPane 的策略,因为节点只是添加到列表的末尾,而不是按照行或列索引进行相应的重新排序。

另外记住要考虑从列表中删除的所有节点都会减少上面所有剩余节点的索引。这也可能是运行时错误的来源。

调用静态方法 clearConstraints() 来移除您显式或隐式设置的所有约束也是值得的。

快乐编码。

答案 2 :(得分:0)

如果您从上述解决方案中获得了空指针异常,请设置要删除的(col,row)节点的父if,您可以这样做

boolean removeFromPane(String id) {
    for (final Node node : this.gridPane.getChildren()) {
        if (node != null 
              && node.getId() != null
              && node.getId().equals(this.selectedTask.toString())) {
            return this.gridPane.getChildren().remove(node);
        }
    }
    return false;
}