提问者:小点点

javafx GridPane检索特定的Cell内容


我想检索Gridpane中一个特定单元格的内容。我在单元格中放置了带有

setConstraints(btt , 0 ,1 ) 

setConstraints(btt , 0 ,2 )

getChildren().add....

在我的例子中GridPane. getChildren.get(10)不好。我想直接进入单元格(4,2)并获取其内容。


共3个答案

匿名用户

好吧,我想如果没有解决方案可以通过列和行索引从gridpane中获取特定节点,我有一个函数可以做到这一点,

private Node getNodeFromGridPane(GridPane gridPane, int col, int row) {
    for (Node node : gridPane.getChildren()) {
        if (GridPane.getColumnIndex(node) == col && GridPane.getRowIndex(node) == row) {
            return node;
        }
    }
    return null;
}

匿名用户

假设您有一个8x8的带窗格,其中i是行,j是列,您可以编写:

myGridPane. get儿童().get(i*8 j)

返回类型是一个对象,所以你必须强制转换它,在我的例子中是:

(StackPane)(myGridPane. get儿童().get(i*8 j))

匿名用户

我在这个问题中遇到了一些麻烦,因为方法GridPane. getColumnIndex(Node node)可能会在第一行或colum中返回null(当索引实际上为0时)。因此我使用了wrapperclassInteger并得到了以下解决方案。也许它会帮助其他人解决同样的问题。

private Node getNodeFromGridPane(GridPane gridPane, int col, int row) {
    ObservableList<Node> children = gridPane.getChildren();
    for (Node node : children) {
        Integer columnIndex = GridPane.getColumnIndex(node);
        Integer rowIndex = GridPane.getRowIndex(node);

        if (columnIndex == null)
            columnIndex = 0;
        if (rowIndex == null)
            rowIndex = 0;

        if (columnIndex == col && rowIndex == row) {
            return node;
        }
    }
    return null;
}