如何使用循环绘制矩形?

时间:2016-04-18 16:13:28

标签: java swing object for-loop colors

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

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

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

这就是我所拥有的,由于某种原因它不会画出矩形,我不能让它换成替代颜色。

2 个答案:

答案 0 :(得分:4)

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

您的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。 / p>

我还假设您将Graphics的实例命名为g,因为大部分时间都以这种方式完成。

答案 1 :(得分:2)

为什么使用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);
}