在JavaFX应用程序中创建N x N网格最简单的方法是什么?
我正在寻找的唯一要求是网格的大小总是占用相同的空间量,因此更多的正方形=更小的正方形。我可以为方块设置颜色,我可以单独悬停在每个方格上,并且可以为每个方块显示一些。
在程序运行之前我不会知道'N'并解析一些数据来计算我需要多少总方格,这是我计算可以使用的最小NxN网格时所需的。
据我所知,我的选择是:
我不一定会找人编写解决方案,但如果有人处理了这个问题,并且知道一个好的方法我会听到它。
答案 0 :(得分:2)
不要偏离原来的想法。当你给出的所有方法都可行时,你为什么要寻找“无痛”的方式?这是使用矩形的一个。 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)对于悬停,你在寻找什么样的悬停效果?你可以在每个矩形上添加悬停效果,如果你想让我告诉你如何,我绝对可以为你编码。