2015-11-05 105 views
0

在JavaFX应用程序中创建N×N网格的最简单方法是什么?生成N×N网格

我正在寻找的唯一要求是网格的大小将始终占用相同数量的空间,所以更多的平方=更小的方格。我可以为广场设置颜色,并且我可以单独悬停在每个广场上,并​​且可以为每个广场显示一些广告。

直到程序运行并解析了一些数据,才知道需要多少个总平方,这就是当我计算我可以使用的最小NxN网格时。

从我可以告诉我的选择是:

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

我不一定要找人编码解决方案,但如果有人已经处理了这一点,并知道一个好方法,我想听听它。

回答

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); 
     } 
    }); 

- 编辑

1)Yes, it works for me.

2)对于哈弗,什么样的悬停效果你找谁?您可以将悬浮效果添加到每个矩形,如果您想让我告诉您如何,我可以为您编码。

+0

谢谢,只是一个问题,将鼠标悬停在每个矩形上会很简单吗?我希望能够在方块上方悬停并显示一些信息。 –

+0

[看起来不错](http://puu.sh/l9MPf/e80e680fc5.png)到目前为止,感谢提示。 –

+0

我刚编辑过。如果您需要更多帮助,请在这里留言。 – Steven