有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java根据宽度、高度和总框创建二维网格

我试图在屏幕上画2048个框,有宽度和高度。(我用Java制作)

我有以下变量:

  • 宽度=1024
  • 高度=768
  • 人口=2048

基于这些变量,如何绘制包含x列数和y行数的网格,从而使整个布局完全符合所需的宽度和高度

例如: 我的宽度和高度为4x4,总人口为4,因此我有2列和2行

示例2: Grid of colored boxes

我想在上面的屏幕截图中复制完全相同的内容,但我不知道需要循环多少行和列以及每个正方形的大小

我只知道窗口的总宽度/高度,以及我想要绘制的框的总数


共 (2) 个答案

  1. # 1 楼答案

    如果长方体需要为矩形,则有多种可能的解决方案。例如,对于区域12,盒子可以是12x1、1x12、4x3、3x4、6x2、2x6等。。更不用说浮动值了

    如果方形框正常:

    area = available_width * available_height
    area_per_box = area / no_of_boxes
    length = sqrt(area_per_box)
    

    用获得的长度作为小盒子的宽度和高度填充网格

    另一种方法是根据需要填充网格,并将网格缩放到所需的尺寸

  2. # 2 楼答案

    为自己回答这样的问题,你能做的最好的事情就是拿出一张纸和一支铅笔,画出一堆例子。标记窗口的宽度和高度,以及每个框的位置、宽度和高度。继续绘制示例,直到注意到图案

    堆栈溢出并不是为一般的“我该怎么做”类型的问题而设计的。这是针对特定的“我尝试了X,期望是Y,但得到了Z”类型的问题。你需要break your problem down into smaller pieces一次一块地把这些碎片拿出来。尽管如此,我可以试着在一般意义上提供帮助

    首先,您需要计算网格应该有多少行和列。从填充到行和列计数并不是只有一种正确的方法。事实上,这甚至可能是不可能的-你会如何划分一个3人的人口?还有多种解决方案:如果您的人口数为20,那么您可以使用1x20、2x10、4x5、5x4、10x2或20x1的网格。我建议你把这当作一个单独的问题来对待,然后就这个问题单独提问

    但是一旦你有了行和列的计数,你就可以使用一些基本的数学来计算出每个框的位置和大小。同样,列举一些例子会有所帮助,但基本情况如下:

      float cellWidth = width/columns;
      float cellHeight = height/rows;
    
      for (int row = 0; row < rows; row++) {
        for (int column = 0; column < columns; column++) {
    
          float cellX = cellWidth*column;
          float cellY = cellHeight*row;
    
          rect(cellX, cellY, cellWidth, cellHeight);
        }
      }
    

    注意,我从this tutorial获得了这段代码,但是如果你在谷歌上搜索一下,你会在互联网上找到很多例子。如果你仍然不能让它工作,请张贴一个MCVE显示你到底做了什么,我们将从那里开始。祝你好运