Мое назначение - реализовать алгоритм для окраски замкнутой фигуры, начиная с заданной координаты (x, y) и «распространять» через рекурсивные вызовы, пока она не достигнет границ фигуры. Пока это то, что я придумал:
private void color(int x, int y) {
g2d.draw(new Line2D.Double(x, y, x, y));
if (!robot.getPixelColor(x - 1, y).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x - 1, y);
} else if (!robot.getPixelColor(x + 1, y).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x + 1, y);
} else if (!robot.getPixelColor(x, y - 1).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x, y - 1);
} else if (!robot.getPixelColor(x, y + 1).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x, y + 1);
}
}
Класс Robot 'getPixelColor - единственный способ, которым я нашел, чтобы получить цвет данного пикселя (насколько я знаю, другой будет getRGB, но он работает только на объектах Image). Насколько я понимаю, это должно сработать, поскольку внешние линии фигуры определенно черные, а начальные значения x и y взяты из MouseListener, поэтому они находятся внутри фигуры, однако я получаю следующую ошибку:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.java2d.pipe.BufferedContext.validateContext(BufferedContext.java:110)
at sun.java2d.d3d.D3DRenderer.validateContextAA(D3DRenderer.java:42)
at sun.java2d.pipe.BufferedRenderPipe$AAParallelogramPipe.fillParallelogram(BufferedRenderPipe.java:445)
at sun.java2d.pipe.PixelToParallelogramConverter.drawGeneralLine(PixelToParallelogramConverter.java:264)
at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:121)
at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2336)
at dline.DrawingSpace.color(DrawingSpace.java:87)
at dline.DrawingSpace.color(DrawingSpace.java:93)
at dline.DrawingSpace.color(DrawingSpace.java:90)
at dline.DrawingSpace.color(DrawingSpace.java:93)
at dline.DrawingSpace.color(DrawingSpace.java:90)
(DrawingSpace является подклассом JPanel)
Учитель сказал нам, что это потребляет память, однако это должен быть рабочий алгоритм, поэтому я, очевидно, что-то делаю не так. Любая помощь будет очень ценной, спасибо.