Я бы не использовал GridPane, поскольку его дочерние элементы не гарантировались одинакового размера, только для выравнивания краев их ячеек сетки.
A TilePane , однако, делает гарантировать, что его клетки одинакового размера. Затем вы можете использовать Group , чтобы объединить TilePane с узлами, такими как Circle s, которые центрированы в точках между ячейками сетки с использованием некоторой основы c math:
public class Grid
extends Application {
private int rows = 10;
private int columns = 10;
private int spacing = 8;
@Override
public void start(Stage stage) {
TilePane pane = new TilePane(spacing, spacing);
pane.setPrefColumns(columns);
Group group = new Group(pane);
for (int row = 1; row < rows; row++) {
for (int col = 1; col < columns; col++) {
Circle point = new Circle(2);
point.setFill(Color.BLACK);
// x = ((tilewidth + hgap) * col) - (hgap / 2)
// y = ((tileheight + vgap) * row) - (vgap / 2)
point.centerXProperty().bind(
pane.tileWidthProperty().add(pane.hgapProperty())
.multiply(col)
.subtract(pane.hgapProperty().divide(2)));
point.centerYProperty().bind(
pane.tileHeightProperty().add(pane.vgapProperty())
.multiply(row)
.subtract(pane.vgapProperty().divide(2)));
group.getChildren().add(point);
}
}
// Example grid content
for (int row = 0; row < rows; row++) {
for (int col = 0; col < columns; col++) {
Text text = new Text(String.valueOf(row * rows + col));
pane.getChildren().add(text);
}
}
stage.setScene(new Scene(group));
stage.setTitle("Grid");
stage.show();
}
}