Передать ссылку Graphics
из paintComponent
в drawSierpTriangle
public void paintComponent(Graphics g)
{
super.paintComponent(g);
drawSierpTriangle(g, this.x, this.y, this.side);
g.drawRect(x,y,1,1);
}
public void drawSierpTriangle(Graphics g, int x, int y, int size)
{
if (size == 1)
{
//Draw rectangle? This is where I need help
g.drawRect(x,y,1,1); //this does not work, passing Graphics g into the method also does not work
}
else
{
drawSierpTriangle(g, x/2, y, size/2);
drawSierpTriangle(g, x,y/2,size/2);
drawSierpTriangle(g, x/2,y/2,size/2);
}
}
Это приводит к: Исключению в потоке "AWT-EventQueue-0" java.lang.StackOverflowError atпервый рекурсивный вызов метода.Любой ввод?
public final int side = getsize();
сделает side
навсегда 0
.
Заменить его на что-то более похожее на ...
public int getSide() {
int width = this.getWidth();
int height = this.getHeight();
if (width <= height) {
return width;
} else {
return height;
}
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
int side = getSide();
if (side == 0) return;
drawSierpTriangle(g, this.x, this.y, side);
g.drawRect(x, y, 1, 1);
}
Это будет оценивать side
каждый раз, когда компонент окрашивается.Также будет пропущено рисование фигуры, если сторона 0
У вас также будет такая же проблема с x
и y
, так как там состояние никогда не изменяется