在Java中单击时尝试删除屏幕上的对象不起作用

时间:2012-11-07 01:48:41

标签: java vector mouseevent

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

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

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;
    }

}

1 个答案:

答案 0 :(得分:2)

您需要的是使用Iterator。像这样:

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

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

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

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