当前位置: 首页 > 知识库问答 >
问题:

如何在JavaFX上绘制网格并用点绘制网格角?

法风畔
2023-03-14

我是JavaFx的新手,我想知道如何绘制网格,我想在网格角上绘制点。我应该使用网格窗格作为基础还是线条图?使用网格并在其上绘制的最佳类是什么?

共有1个答案

欧阳昊阳
2023-03-14

我不会使用 GridPane,因为它的子项不能保证大小相同,只能对齐它们的网格单元格边缘。

但是,TilePane 确实可以保证其单元格的大小相同。然后,您可以使用组将 TilePane 与节点(如圆圈)组合在一起,这些节点使用一些基本数学以网格单元格之间的点为中心:

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();
    }
}
 类似资料:
  • 我一直在编写迷宫算法,并希望绘制使用JavaFX生成的迷宫。 首先,我试图画一个简单的网格——但是由更小的形状组成,这样我以后就能把网格的形状变成迷宫。 我使用了小的左上角形状(像┏)和一个< code>GridPane,但是这导致了单元格之间的小的不连续。(截图和下面的代码)。我怎样才能无缝地把这些形状拼在一起?关于< code>Gridpane的想法,我是不是找错了对象? 目前已尝试绘制网格

  • 所以我试图用Java显示一个棋盘。到目前为止,我可以正确地绘制和着色一组矩形,并正确地调整窗口和矩形的大小。然而,现在我想在这些矩形上添加一个棋子的图像,我不知道如何继续。 我为棋子创建了png的图像视图,但是当我尝试像使用矩形一样将其添加到网格窗格中时,它会给我一个重复的子错误。 以下是目前为止有效的代码 创建象棋棋子的图像视图并将其绘制在矩形之上的最佳方法是什么,就像棋子在棋盘上的样子一样?我

  • 问题内容: 我想提请使用Java网格(10×10),但我们必须使用来实现它的,这是我的计划至今 问题答案: 该代码有效。 只需删除25

  • 我似乎在绘制正确的十六进制网格时遇到了一点麻烦: 正如您所看到的,六边形只是稍微不对齐,尽管我相信我的数学是正确的(其中一些可以通过http://www.redblobgames.com/grids/hexagons/进行验证)。 我的绘制方法是从左上六边形(第一行的第一个瓷砖)开始,绘制那一行瓷砖。然后对于下一行,有一个负X偏移量和正Y偏移量等,直到它到达中间行,在中间行X偏移量增加,直到0:

  • 我以前做了几个实验,以找到绘制大规模六边形网格的最佳方法。 我尝试使用、绘制hexes。它在小网格中工作得很好,但如果我在一个网格中有超过1000+的单元格,fps就开始很难下降。 所以我想出了这个想法,将纹理(包含六边形网格模式)应用到一个简单的平面上。我只需要设置纹理的函数来指定垂直和水平执行多少次重复。

  • DrawImage类进行实际绘制