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 に答える