替换JavaFX GridPane中的(row,col)节点

Jab*_*ook 6 java grid javafx dynamic javafx-2

我正在制作基于"感知"和吃食物的错误的网格式游戏/模拟.我正在使用gridPane(称为worldGrid)标签来显示错误和食物的网格.当一个bug将细胞移向食物等时,这显然会不断更新.

我目前有一个函数updateGrid(int col, int row, String cellContent),我想在[row,col]替换标签,该标签在cellContent中有新文本.

我有以下工作

worldGrid.add(new Label(cellContent), row,col);
Run Code Online (Sandbox Code Playgroud)

然而,我担心这只是在当前标签上添加一个标签,显然超过100次迭代的模拟并不理想.

我在添加标签之前尝试了这个:

worldGrid.getChildren().remove(row,col);
Run Code Online (Sandbox Code Playgroud)

然而,IllegalArgumentException当我尝试做这一add行时,我得到了一个.

关于如何做到这一点的任何想法?或者甚至更好,关于如何最好地显示最终将使用精灵而不是文本的不断变化的网格的任何想法?

Jen*_*ack 14

grid.add(node,col,row)提供的col/row(ATTENTION first come col!)只是一个布局约束.这没有提供任何方法来访问像二维数组中的插槽那样的列或行.因此,要替换节点,您必须知道其对象本身,例如,在单独的数组中记住它们.

然后你就可以调用getChildren().remove(object)...例如:

GridPane grid = new GridPane();

Label first = new Label("first");
Label second = new Label("second");

grid.add(first,  1,  1);
grid.add(second,  2,  2);
second.setOnMouseClicked(e -> {
    grid.getChildren().remove(second);
    grid.add(new Label("last"), 2, 2);
});
box.getChildren().addAll(grid);
Run Code Online (Sandbox Code Playgroud)