整体填充Java(在画布中填充一个圆)

整体填充Java(在画布中填充一个圆),java,canvas,flood-fill,Java,Canvas,Flood Fill,我正在尝试填充一个圆圈,我在画布上用泛光填充法画了一些点。只有圆圈应该被填满,外面什么都不能。因此,我制作了一个列表,其中存储了画布上已经标记的所有点 private LinkedList<Point> filledpoints = new LinkedList<Point>(); 或者只有四个邻居: // checking if a dot can be drawn: if (!filledpoints.contains(new Point(startX, s

我正在尝试填充一个圆圈,我在画布上用泛光填充法画了一些点。只有圆圈应该被填满,外面什么都不能。因此,我制作了一个列表,其中存储了画布上已经标记的所有点

 private LinkedList<Point> filledpoints = new LinkedList<Point>();
或者只有四个邻居:

 // checking if a dot can be drawn:
  if (!filledpoints.contains(new Point(startX, startY))) {
      drawDot(g,startX,startY,Color.ORANGE);
      filledpoints.add(new Point(startX,startY));
      floodfill(g, startX + 1, startY);
      floodfill(g, startX, startY + 1);
      floodfill(g, startX - 1, startY);
      floodfill(g, startX, startY - 1);
      floodfill(g, startX + 1, startY + 1);
      floodfill(g, startX - 1, startY + 1);
      floodfill(g, startX - 1, startY - 1);
      floodfill(g, startX + 1, startY - 1); 
  }  
 if (!filledpoints.contains(new Point(startX, startY))) {
      drawDot(g,startX,startY,Color.ORANGE);
      filledpoints.add(new Point(startX,startY));
      floodfill(g, startX + 1, startY);
      floodfill(g, startX, startY + 1);
      floodfill(g, startX - 1, startY);
      floodfill(g, startX, startY - 1);
  } 
我还尝试了将列表中的点的值存储到数组中,然后使用数组进行检查,但没有任何帮助。 在第一个递归调用行中,它总是给我这个错误:

线程“AWT-EventQueue-0”java.lang.StackOverflower中的异常位于 sun.java2d.SunGraphics2D.fillOval(未知源)

在这一点上我做错了什么?或者换句话说:我走对了吗?我以前从来没有犯过这个错误,现在我真的很困惑。我这样做对吗?任何提示都会有帮助,它甚至不需要是代码解决方案!:/

如果需要,我的绘画方法(被调用以执行程序)如下所示:

 public void paint(Graphics g) {
  // drawing the circle:
  for (Circle c : circles) {
     drawCircle(g, c.radius, c.centerX, c.centerY);
  }

  if (!startpoints.isEmpty()) {
      for (Point p : startpoints) {
          floodfill(g, p.x, p.y);
      }
  }

}    
Startpoints是我存储圆内第一个点的数组(如果有更优雅的方法,请友好地告诉我)。
请让我知道,如果你需要任何关于我的这个问题的代码的其他信息。如果需要,我会在几秒钟内编辑它

不检查边缘<代码>填充点将包含类似
点(-1,0)
的点。然后,
fillOval
无法绘制它并抛出异常。

您不检查边<代码>填充点将包含类似
点(-1,0)
的点。然后,
Fillova
无法绘制它并抛出异常。

好的,这完全有道理。但是我怎么能做到呢?通过for循环或类似的方法检查邻居?您可以像这样扩展if语句if(!filledpoints.contains(point))&&valid(point,width,height)),在valid方法中,您可以执行如下操作:
return point.x>=0&&point.y>=0&&point.xOkay这完全有意义。但是我怎么能做到呢?通过for循环或类似的方法检查相邻对象?您可以像这样扩展if语句if(!filledpoints.contains(point))&&valid(point,width,height))
,并在valid方法中执行以下操作:
return point.x>=0&&point.y>=0&&point.x