我正在尝试在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
的网格线。
我该如何解决这个问题?
答案 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);