0

Java 小程序的目的是这样的:一个球在屏幕上弹跳。这个球的大小和速度可以通过滚动条来改变。用户可以在屏幕上按下并拖动鼠标来绘制矩形。球也会从这些矩形中反弹。这些矩形的边界存储在一个向量中。单击一个矩形时,它(以及该点处的所有其他矩形)将从矢量(和屏幕)中删除。

我目前遇到的问题是单击删除对象不起作用。我正在做的是获取我单击的位置,并遍历向量的每个元素并查看它是否包含该点,如果包含,则将其从向量中删除。这是方法。

public void mouseClicked(MouseEvent m)
{
    if (!ball.flag)
    {
      Vector<Rectangle> v;
      v = (Vector<Rectangle>)ball.r;
      Point p;
      p = new Point(m.getPoint());

      boolean done = false;
      int i = 0;

      for (Rectangle rect : v)
      {
        if(rect.contains(p))
        {
          v.removeElement(i);
          System.err.print("Element removed");
          continue;
        }
        i++;
        if(i>=v.size())
          done=true;
      } 
      ball.r = v;
    }

}
4

1 回答 1

2

您需要的是使用迭代器。像这样:

ListIterator<Rectangle> i = v.listIterator();

while(i.hasNext())
{
    Rectangle r = i.next();

    if(r.contains(p))
        i.remove();
}

这将以安全的方式从列表中删除元素。

于 2012-11-07T02:06:48.190 回答