gpt4 book ai didi

java - 生成 N x N 网格

转载 作者:行者123 更新时间:2023-12-02 04:13:47 26 4
gpt4 key购买 nike

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

我正在寻找的唯一要求是网格的大小将始终占用相同的空间量,因此更多的方 block =更小的方 block 。我可以为方 block 设置颜色,并且可以单独将鼠标悬停在每个方 block 上,并能够为每个方 block 显示一些颜色。

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

据我所知,我的选择是:

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

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

最佳答案

不要偏离最初的想法。当您提供的所有方法都可行时,为什么您还要寻找“无痛”的方法?这是使用矩形的一个。 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;
}

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

 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) Yes, it works for me.

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

关于java - 生成 N x N 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com