12

我正在尝试在 JavaFX 中制作一个简单的游戏(这是一项学校作业),我正在尝试用电路板清除面板,然后重新粉刷它。我尝试了很多方法,这是我发现的唯一一种方法,它可以(在视觉上)删除所有的棋盘,而不会创建一个视觉错误,显示一个已经被删除但仍然显示的棋子。

所以我这样声明gridPane

private GridPane gridPecas;

@Override
public void start(Stage primaryStage)
{
    gridPecas = new GridPane();
    gridPecas.setGridLinesVisible(true);

    paintBoard();

    // rest of the code to create and paint the Stage
 }

 private void paintBoard()
 {
    gridPecas.getChildren().clear();
    // Code to fill the board with ImageView and Images of the pieces
 }

这种方法的问题在于,当“gridPecas.getChildren().clear();” 被称为我只是从GridPanel.

我怎么解决这个问题?

4

5 回答 5

7

setGridLinesVisible(boolean)仅用于调试:

http://docs.oracle.com/javafx/2/api/javafx/scene/layout/GridPane.html#setGridLinesVisible(boolean)

例如,您甚至无法更改 gridLines 颜色。

所以你应该找到另一种制作网格线的方法,然后调用

yourPane.getChildren().clear();

因为它比gridPecas.getChildren().removeAll(pecasFX[i][j]);

于 2013-08-20T10:13:35.517 回答
4

清除 GridPane 和维护 Gridlines 的方法如下:

    Node node = grid.getChildren().get(0);
    grid.getChildren().clear();
    grid.getChildren().add(0,node);

GridPane 中的第一个 Node*(* 如果您在向网格中添加元素之前设置了 GridLinesVisible?)包含 Gridlines(可能还有其他内容)。

所以你只需要在清除之前保留这个节点并在之后重新添加它

于 2015-04-09T10:25:20.533 回答
1

有效清除 GridPane 并恢复维护网格线:

gridPane.setGridLinesVisible(false);
gridPane.getColumnConstraints().clear();
gridPane.getRowConstraints().clear();
gridPane.getChildren().clear();
gridPane.setGridLinesVisible(true);
于 2020-02-19T10:01:29.283 回答
1

单线:grid.getChildren().retainAll(grid.getChildren().get(0));

于 2016-06-12T04:31:15.520 回答
0

嗯,我的建议是根本不要清除所有孩子。始终保留 imageViews 并替换它们显示的图像。为了“清除”电路板,放置一个“空”图像。

于 2012-06-22T07:54:22.863 回答