在网格窗格上获取单元格内容

时间:2019-05-18 15:36:09

标签: java javafx

我正在尝试使用JavaFX进行桌游。游戏是Carcassone。

我决定使用GridPane绘制板,因此我可以使用x,y坐标访问每个图块,这对于作为HashMap的逻辑板是有意义的,因此对于每个x,y位置,我添加逻辑板上的图块,它也将添加到绘图板(网格窗格)中。

但是,对于GridPane中添加的每个图块,我想在相邻的空图块中添加“空图块”。假设绿色的瓦片是播放的瓦片,蓝色的是相邻的瓦片,白色的是网格窗格的其余部分,它是空白的(空值):

enter image description here 因此,新的图块(绿色)只能添加到蓝色位置,并且如果相邻的空图块为空,则添加的每个绿色图块都将变为“蓝色”。

问题是,如何知道相邻的图块是否为空。我发现了这个功能:

private boolean tileEmpty(int row, int column, GridPane gridPane) {
    Node result = null;
    ObservableList<Node> childrens = gridPane.getChildren();

    for (Node node : childrens) {
        if(GridPane.getRowIndex(node) == row && GridPane.getColumnIndex(node) == column) {
            result = node;
            break;
        }
    }
    return (result == null);
}

但是当我以这种方式创建网格时,它给了我NullPointerException:

private void crearTauler() {
    GridPane _taulerVisual = new GridPane();
    _taulerVisual.setPrefSize(800,600);
    _taulerVisual.setAlignment(Pos.CENTER);
    _taulerVisual.setGridLinesVisible(true);
    _taulerVisual.setHgap(4);
    _taulerVisual.setVgap(3);
}

这是tile加法器功能,与其他功能在同一类中:

public class myTile extends Imageview {...}

public void addVisualTile(myTile r, int x, int y) {
    myVisualTile rV = new myVisualTile(r);
    myVisualTile add = new myVisualTile();
    _taulerVisual.add(rV, x, y);

    // And this is the code I'd to make work:
    if (tileEmpty(x-1, y, _taulerVisual)) {
        _taulerVisual.add(add, x-1, y);
    }
    else if (tileEmpty(x+1, y, _taulerVisual)) {
        _taulerVisual.add(add, x+1, y);
    }
    else if (tileEmpty(x, y-1, _taulerVisual)) {
        _taulerVisual.add(add, x, y-1);
    }
    else if (tileEmpty(x, y+1, _taulerVisual)) {
        _taulerVisual.add(add, x, y+1);
    }
}

所以,我无法在网格窗格中进行迭代,因为除了一些孩子是空孩子以外,所有孩子都没有。有解决这个问题的主意吗?

0 个答案:

没有答案