在JavaFX中清理gridPane并维护网格线

时间:2012-06-21 22:32:05

标签: javafx-2 gridpanel gridlines

我正在尝试在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的网格线。

我该如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

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]);

更好

答案 1 :(得分:3)

清除GridPane并维护网格线的方法如下:

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

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

所以你只需要在清除之前保留这个节点。

后重新添加

答案 2 :(得分:1)

单行:grid.getChildren()。retainAll(grid.getChildren()。get(0));

答案 3 :(得分:0)

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

答案 4 :(得分:0)

有效清除GridPane并还原维护的网格线:

gridPane.setGridLinesVisible(false);
gridPane.getColumnConstraints().clear();
gridPane.getRowConstraints().clear();
gridPane.getChildren().clear();
gridPane.setGridLinesVisible(true);