生成N×N网格
问题描述:
在JavaFX应用程序中创建N×N网格的最简单方法是什么?生成N×N网格
我正在寻找的唯一要求是网格的大小将始终占用相同数量的空间,所以更多的平方=更小的方格。我可以为广场设置颜色,并且我可以单独悬停在每个广场上,并且可以为每个广场显示一些广告。
直到程序运行并解析了一些数据,才知道需要多少个总平方,这就是当我计算我可以使用的最小NxN网格时。
从我可以告诉我的选择是:
- GridPane - 使用列约束和行约束,以产生规模和可能的徘徊添加属性?
- TableView - 更多的选项可以让每个单元格数据显示在鼠标悬停时显示,但仍然很难添加行和列开始。
- 矩形 - 只需生成并绘制每个矩形,同时计算每个正方形的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;
}
然后,只需将鼠标侦听器添加到窗格,如果您想使其更改颜色。
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);
}
});
- 编辑
2)对于哈弗,什么样的悬停效果你找谁?您可以将悬浮效果添加到每个矩形,如果您想让我告诉您如何,我可以为您编码。
谢谢,只是一个问题,将鼠标悬停在每个矩形上会很简单吗?我希望能够在方块上方悬停并显示一些信息。 –
[看起来不错](http://puu.sh/l9MPf/e80e680fc5.png)到目前为止,感谢提示。 –
我刚编辑过。如果您需要更多帮助,请在这里留言。 – Steven