当达到10个矩形时,在屏幕上替换矩形对象?

时间:2012-11-12 15:21:27

标签: java

我需要创建一个在画布上显示10个矩形的类,每个矩形都有一个随机颜色和位置。当它达到11时,第一个矩形将替换为新的随机颜色和位置。 12th rect替换第二个框,依此类推。我正在使用acm.jar,http://jtf.acm.org/javadoc/student/index.html

import acm.graphics.*;
import acm.program.*;
import java.awt.Color;
import java.util.Random;

public class Rect extends GraphicsProgram 
{
    public void run()
    {
        final int width = 800;
        final int height = 600;
        final int boxWidth = 50;
        final int maxBoxes = 10;

        this.setSize(width, height);
        Random random = new Random();              

        for(;;) {
            int x = random.nextInt(width-boxWidth);
            int y = random.nextInt(height-boxWidth);  
            Color c = new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255));

                GRect r = new GRect(x, y, boxWidth, boxWidth);
                r.setFilled(true);
                r.setLocation(x, y);
                r.setFillColor(c);
                this.add(r);                   

                this.pause(100);

        }




    }
}

我已经想出了如何使颜色随机,我无法弄清楚如何用旧的替换盒子。

修改::: ---------------------------------------- ----------------------------------------

我确实设法让它在下面的人的帮助下工作。以下是新的for循环:

for(;;) {
            int x = random.nextInt(width-boxWidth);
            int y = random.nextInt(height-boxWidth);  
            Color c = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));

                GRect r = new GRect(boxWidth, boxWidth);
                r.setFilled(true);
                r.setLocation(x, y);
                r.setFillColor(c);                
                add(r, x, y);

                int n = getElementCount();
                if (n>maxBoxes)
                {
                    remove(getElement(0));
                }

                this.pause(100);

        }

我不明白为什么remove(getElement(0))工作原理,一旦删除了元素,元素如何改变它的索引?如果我有10个元素0-9,并且我删除了元素(0)为什么其他元素会改变其索引?

2 个答案:

答案 0 :(得分:1)

您需要存储到目前为止绘制的矩形列表。每次添加新矩形时,如果列表已经是10个矩形长,则删除第一个矩形并添加一个新矩形。然后,每次刷新显示时都需要重绘所有矩形,使用双缓冲来防止屏幕闪烁。

答案 1 :(得分:1)

这看起来真的很像家庭作业,所以我不会为你做,而是提供一些线索。

您可以使用getElementCount()方法来了解帧中当前的矩形数。

创建一个GObject列表,并在创建时用矩形填充它。 一旦达到10,该过程就变为

  • 使用remove(GObject gobj)
  • 从屏幕中删除矩形
  • 删除第一个元素,添加到列表末尾。

你在这里:)