Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在鼠标事件后从数组列表中删除对象?_Java_Arrays_Loops_Object_Jpanel - Fatal编程技术网

Java 如何在鼠标事件后从数组列表中删除对象?

Java 如何在鼠标事件后从数组列表中删除对象?,java,arrays,loops,object,jpanel,Java,Arrays,Loops,Object,Jpanel,当我在JPanel中单击鼠标时,程序会创建一个绿点,并在屏幕上显示一个点数计数器。点位于保存为对象的数组列表中。我试图修改这个代码,如果我在一个半径为6的现有点的半径内单击,该点将从列表中消失,并从屏幕上删除 在你问之前,是的,你可能会意识到这是一个家庭作业问题,不,我不是想作弊 我认为这需要创建一个for循环来扫描数组中的对象,寻找指针可能单击过的对象。然而,我对如何准确地完成这一点感到困惑 谢谢 public class DotsPanel extends JPanel { priva

当我在JPanel中单击鼠标时,程序会创建一个绿点,并在屏幕上显示一个点数计数器。点位于保存为对象的数组列表中。我试图修改这个代码,如果我在一个半径为6的现有点的半径内单击,该点将从列表中消失,并从屏幕上删除

在你问之前,是的,你可能会意识到这是一个家庭作业问题,不,我不是想作弊

我认为这需要创建一个for循环来扫描数组中的对象,寻找指针可能单击过的对象。然而,我对如何准确地完成这一点感到困惑

谢谢

public class DotsPanel extends JPanel
{
   private final int SIZE = 6;  // radius of each dot

   private ArrayList<Point> pointList;// "Point"s are objects that rep. the x & y coordinates of a dot





   public DotsPanel()
   {
      pointList = new ArrayList<Point>();

      addMouseListener (new DotsListener());

      setBackground(Color.black);
      setPreferredSize(new Dimension(300, 200));
   }




   public void paintComponent(Graphics page)
   {
      super.paintComponent(page);

      page.setColor(Color.green);

      for (Point spot : pointList)
         page.fillOval(spot.x-SIZE, spot.y-SIZE, SIZE*2, SIZE*2);



      page.drawString("Count: " + pointList.size(), 5, 15);//draws the image of the counter




   }




   private class DotsListener implements MouseListener
   {


      public void mousePressed(MouseEvent event)
      {
         pointList.add(event.getPoint());
         repaint();
      }


      public void mouseClicked(MouseEvent event) {}
      public void mouseReleased(MouseEvent event) {}
      public void mouseEntered(MouseEvent event) {}
      public void mouseExited(MouseEvent event) {}
   }
}

显然,您需要修改mousePressed在DotsListener中的实现,因为您不希望在每次单击时无条件地添加一个新点。我建议把它改成这样:

  public void mousePressed(MouseEvent event)
  {
     Point hitDot = getHitDot(event);
     if (hitDot == null) {
         // no dots hit
         pointList.add(event.getPoint());
     } else {
         // hit a dot
         pointList.remove(hitDot);
     }
     repaint();
  }

既然这是家庭作业,我就不给你写getHitDot了。我要说的是,您的想法是正确的:遍历pointList的所有元素,测试每个点,如果在鼠标按下坐标的距离范围内,则立即返回它。您可以使用公式对每个点进行命中测试。

pointList.ContainesEvent.getPoint-如果arraylist包含该值,则返回true,否则返回false