繁体   English   中英

如何使用循环绘制矩形?

[英]How to draw rectangles using a loop?

我需要创建一个循环,以交替颜色(例如,黑色,白色,黑色,白色)在垂直线上绘制矩形。 谁能告诉我这是怎么做的?

我尝试了很多方法,但似乎无法使循环正常工作,谢谢。

for (int x = 0; x>10;x++) {
    int y= 180;
    graph2D.drawRect(170, y, 20, 50);
    y = y + 45;
}

这就是我所拥有的,由于某种原因它不会绘制矩形,我无法将其替换为其他颜色。

您在这里遇到了一些问题。

您的for loop将不执行任何迭代,因为您的条件是x > 10而不是x < 10

将第一行从:

for (int x = 0; x>10;x++){

至:

for (int x = 0; x < 10; x++) {

另外,每次迭代都将y重置为180,因此一旦循环开始,所有矩形都将相互绘制。 在循环外部声明y ,或使用x计算矩形位置。

像这样:

int y = 180;
for (int x = 0; x < 10; x++) {
    graph2D.drawRect(170, y, 20, 50);
    y = y + 45;
}

或像这样:

for (int x = 0; x < 10; x++) {
    graph2D.drawRect(170, (x * 45) + 180, 20, 50);
}

上面的数学(x * 45) + 180是一种非常简单的说法,第一个矩形将位于(x * 45) + 180 = 0 + 180 = 180 ,第二个矩形将位于(x * 45) + 180 = 45 + 180 = 225 ,依此类推。

要更改矩形的颜色,您需要制作一个Colors的列表或数组,并在每次迭代中使用与列表不同的Color

//Make the list
Color[] colors = {Color.black, Color.blue, Color.cyan, Color.darkGray,
                  Color.green, Color.lightGray, Color.magenta, Color.magenta,
                  Color.orange, Color.pink, Color.red, Color.white, Color.yellow};

//Draw each rectangle
for (int x = 0; x < 10; x++) {

    //Change the color
    g.setColor(colors[x]);

    //Draw the rectangle
    graph2D.drawRect(170, (x * 45) + 180, 20, 50);
}

当然,如果您希望颜色是随机的,则可以使用Random类进行研究,并生成一个介于0和colors数组长度之间的随机数。 还要注意,我将x用作colors数组的索引,并且如果您的循环将x递增为高于数组中的颜色数,则将获得ArrayIndexOutOfBoundsException。

我还假定您将Graphics的实例命名为g ,因为大多数情况下都是通过这种方式完成的。

为什么要循环使用y变量而不是x

@Override
public void paint(Graphics graph2D) {
    for (int y=0; y<10; y++) {
        int height = 50;
        if (y%2==0) {
            graph2D.setColor(Color.white);
        } else {
            graph2D.setColor(Color.black);
        }
        graph2D.fillRect(170, 180 + y*height, 20, 50);
    }
}

在绘制矩形时也要注意区别:

  • .drawRect(..)绘制矩形的边框。
  • .fillRect(..)绘制矩形本身。

如果你想切换blackwhite的颜色,改变与每一个循环的颜色。 循环的每个偶数y%2 == 0将具有一种颜色,否则将具有第二种颜色(也在上面的代码中提到):

if (y%2==0) {
    graph2D.setColor(Color.white);
} else {
    graph2D.setColor(Color.black);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM