我有一个名为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。
答案 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
}
(请注意,我还没有测试过这个。)