打印2d对象数组

时间:2015-11-14 19:48:55

标签: java arrays user-interface graphics

我有一个名为square的类,然后我有一个名为shapes的类。在这个类中是12x5 2d形状的数组。在square类中有一个名为draw的方法,它在(550,75)处绘制正方形。正方形的宽度为25,高度为25. shape类中的draw方法看起来像

    public void draw(Graphics g) {

    for (i = 0; i < shapes.length; i++) {
        for (j = 0; j < shapes[i].length; j++) {

            shapes[i][j] = new Square();


            shapes[i][j].draw(g);


        }
    }

}

这会将所有正方形绘制在彼此之上。如何以12 x 5格式绘制它们?如果有帮助的话,窗口的大小是600乘600。

1 个答案:

答案 0 :(得分:0)

更改Squares类中的draw方法,将x和y坐标作为参数。

然后您可以将循环更改为:

for (i = 0; i < shapes.length; i++) {
    for (j = 0; j < shapes[i].length; j++) {
        shapes[i][j] = new Square();
        shapes[i][j].draw(g, i * 25, j * 25);
    }
}

这意味着每个方格都会被吸引到正确的位置。

- 编辑 -

如果您无法更改绘图参数,则可以为Square类添加新的构造函数。这不要求其超类具有该构造函数。

int x;
int y;
public Square(int x, int y) {
  this.x = x;
  this.y = y;
}

然后在创建时传递该Square的坐标,并相应地修改draw方法以使用它们。

或者,如果您根本无法更改Squares类,则可以翻译图形坐标。正方形被绘制在(550,75)处,因此如果我们将图形坐标转换为(-550,-75),它将看起来好像我们正在绘制(0,0)。然后我们可以逐步翻译每个后续的方格。

g.translate(-550, -75);
for (i = 0; i < shapes.length; i++) {
    for (j = 0; j < shapes[i].length; j++) {
        shapes[i][j] = new Square();
        shapes[i][j].draw(g);
        g.translate(0, 25); //Move down by 25
    }
    g.translate(25, 0); //Move across by 25
}

(请注意,我还没有测试过这个。)