从单独的方法使用java awt drawRect?

从单独的方法使用java awt drawRect?,java,swing,user-interface,awt,drawrect,Java,Swing,User Interface,Awt,Drawrect,我试图在逐像素的基础上绘制Sierpinski三角形,它可以在窗口大小改变时自动调整大小。我相信我已经完成了大部分项目,但我不太知道如何从paintComponent方法之外的单独递归函数中绘制矩形 public class SierpTriangle extends JPanel { public final int x = this.getWidth(); public final int y = this.getHeight(); public final int

我试图在逐像素的基础上绘制Sierpinski三角形,它可以在窗口大小改变时自动调整大小。我相信我已经完成了大部分项目,但我不太知道如何从paintComponent方法之外的单独递归函数中绘制矩形

public class SierpTriangle extends JPanel 
{
    public final int x = this.getWidth();
    public final int y = this.getHeight();
    public final int side = getsize();

    public int getsize()
    {
        int width = this.getWidth();
        int height = this.getHeight();
        if (width <= height) 
        {
            return width;            
        } 
        else 
        {
            return height;             
        }
    }

    public void paintComponent(Graphics g) 
    {
        super.paintComponent(g);
        drawSierpTriangle(this.x, this.y, this.side);
        g.drawRect(x,y,1,1);
    }

    public void drawSierpTriangle(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(x/2, y, size/2);
            drawSierpTriangle(x,y/2,size/2);
            drawSierpTriangle(x/2,y/2,size/2);
        }   
    }

    public static void main(String[] args)
    {
        new SierpFrame();
    }
}
public类SierpTriangle扩展了JPanel
{
public final int x=this.getWidth();
public final int y=this.getHeight();
公共final int-side=getsize();
公共int getsize()
{
int width=this.getWidth();
int height=this.getHeight();

如果(宽度将
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.StackOverflowerr中出现异常。有任何输入吗

将使
侧边
永远
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);
}
public int getSide(){
int width=this.getWidth();
int height=this.getHeight();

if(宽度)这将导致线程“AWT-EventQueue-0”中出现异常java.lang.StackOverflower在方法的第一次递归调用时出错。是否有任何输入?@Flashfield验证退出条件,
size
是否可能是
1
?另外,请注意,
JPanel
中定义了一个在
getSize
中调用的方法
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);
}