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

标签 java vector mouseevent

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

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

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

}

最佳答案

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

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

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

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

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

关于java - 在 Java 中单击时尝试删除屏幕上的对象不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13262157/

相关文章:

java - 如何修复 "module javafx.graphics does not "在 Java 中打开 com.sun.javafx.text“to unnamed module”的问题?

C++计算 vector 中两个元素之间的差异

c++ - 同步 : Detecting Pointer/Clicks

javascript - 在 JavaScript 中隐藏/欺骗引荐来源网址的最可靠方法是什么?

java - Thymeleaf 模板结果缓存

java - 为什么我在这里收到 NotSerializedException?

c++ - 为什么我可以将字符分配给字符串对象而不是字符串对象的 vector ?

c - 如何在c中预定义一个数组?

Java:JScrollPane 在按下 ctrl 时禁用滚动

java - Eclipse rcp 导出产品抛出 NullPointerException