Как нарисовать сетку и нарисовать углы сетки с точкой на JavaFX? - PullRequest
0 голосов
/ 13 марта 2020

Я новичок в JavaFx и хотел знать, как рисовать сетку, где я хочу рисовать точки на углах сетки. Должен ли я использовать сетку в качестве основы или линейной диаграммы? Какие классы лучше всего использовать сетку и рисовать на ней?

1 Ответ

1 голос
/ 14 марта 2020

Я бы не использовал 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...