生成 N x N 网格

Generating an N x N grid

在 JavaFX 应用程序中创建 N x N 网格最轻松的方法是什么?

我要寻找的唯一要求是网格的大小始终占用相同数量的 space,所以更多的正方形 = 更小的正方形。我可以为方块设置颜色,我可以分别将鼠标悬停在每个方块上,并能够为每个方块显示一些颜色。

我不知道 'N' 直到程序运行并解析一些数据以计算出我需要多少个正方形,这是在我计算我可以使用的最小 NxN 网格时。

据我所知,我的选择是:

  1. GridPane - 使用列约束和行约束生成大小并可能添加悬停属性?
  2. TableView - 更多选项可以让每个单元格数据在悬停时显示,但仍然很难仅添加行和列作为开始。
  3. 矩形 - 只需生成并绘制每个矩形,同时计算每个正方形的 x 和 y 坐标。这将使颜色和悬停变得容易,但我看不到调整大小如何工作,但我可以为我的应用程序设置特定大小。我还必须计算使每个正方形填满网格区域的最佳尺寸。

我不一定要找人编写解决方案,但如果有人处理过这个问题并且知道一个好方法,我想听听。

不要偏离最初的想法。既然你给出的所有方法都可行,你为什么还要寻找 "painless" 种方法?这是一个使用你的矩形的。 GridMaker.SCREEN_SIZE指的是你必须拥有的屏幕尺寸。

   public static Pane makeGrid(int n){

    double width = GridMaker.SCREEN_SIZE/n;
    Pane p = new Pane();

    Rectangle [][] rec = new Rectangle [n][n];

    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            rec[i][j] = new Rectangle();
            rec[i][j].setX(i * width);
            rec[i][j].setY(j * width);
            rec[i][j].setWidth(width);
            rec[i][j].setHeight(width);
            rec[i][j].setFill(null);
            rec[i][j].setStroke(Color.BLACK);
            p.getChildren().add(rec[i][j]);

        }
    }

    return p;
}

如果您想让窗格改变颜色,只需将鼠标侦听器添加到窗格即可。

 p.setOnMouseClicked(new EventHandler <MouseEvent> (){
        @Override
        public void handle(MouseEvent me){
            double posX = me.getX();
            double posY = me.getY();

            int colX = (int)(posX / width);
            int colY = (int) (posY / width);

            rec[colX][colY].setFill(Color.RED);
        }
    });

-- 编辑

1)

2) 对于悬停,您想要什么样的悬停效果?您可以在每个矩形上添加悬停效果,如果您想让我告诉您如何操作,我绝对可以为您编写代码。