我一直无法找到这个问题的答案,所以希望有人可以帮助我。
我正在做一个课程作业,我必须使用图形制作一个场景。到目前为止,我们只有两个关于图形的讲座,所以我不熟悉。问题是她的方法没有按首选顺序绘制。正如你在后面的代码中看到的那样,我有两个递归方法制作天空和草背景/前景。除此之外,我希望有一个十字架(以及之后授予的许多组件我可以解决这个问题),但十字架并没有出现,尽管它是在paint中调用的最后一个方法。
import java.awt.*;
import javax.swing.*;
public class DrawPicture extends JApplet
{
public final int SIZE = 800;
public final int DIST = 20;
public Color bg1 = new Color(0, 200, 255);
public Color bg2 = new Color(0, 175, 255);
public Color grass1 = new Color(0, 220, 60);
public Color grass2 = new Color(30, 255, 150);
public Color brown = new Color(110, 80, 20);
public void backgroundRec(int x, int y, int c, Graphics g)
{
if (c%2==0)
g.setColor(bg1);
else if (c%2==1)
g.setColor(bg2);
if (c < 40)
{
g.fillOval(x, y, SIZE, SIZE);
backgroundRec(x, y - DIST, c+1, g);
}
}
public void foregroundRec(int x, int y, int c, Graphics g)
{
if (c%2==0)
g.setColor(grass1);
else if (c%2==1)
g.setColor(grass2);
if (x < SIZE/2)
{
g.fillRect(x, y, SIZE, DIST);
foregroundRec(x, y + DIST, c+1, g);
}
}
public void cross(int x, int y, Graphics g)
{
g.setColor(brown);
g.fillRect(SIZE/2, SIZE/2, 45, 275);
g.fillRect(SIZE/2-50, SIZE/2+45, 150, 45);
}
public void paint(Graphics g)
{
//backgroundRec(0, 0, 0, g);
//foregroundRec(0, 400, 0, g);
cross(SIZE/2, SIZE/2, g);
}
}
答案 0 :(得分:0)
其中一个问题是,StackOverflowException
中有foregroundRec
,因为似乎没有任何内容可以阻止更新,可能是因为您没有更改{{1}的值}}
我&#34;思考&#34; x
应为foregroundRec(x, y + DIST, c + 1, g);
或其他内容:P - 但根据您的代码,foregroundRec(x + DIST, y + DIST, c + 1, g);
必须更改
在进行任何自己的绘画之前,你也应该打电话给x
,这可以确保你不会得到任何奇怪的油漆文物
您遇到的另一个问题是,您依赖于super.paint
媒体资源,而应该使用SIZE
或getWidth
来确定小程序的实际大小是什么
我还建议看看:
好的,经过几次迭代后,我实际上认为你正在尝试做的是......
getHeight