Java与super.paintComponents(g)的问题,它使一个打印屏幕

Java与super.paintComponents(g)的问题,它使一个打印屏幕,java,swing,jpanel,paintcomponent,Java,Swing,Jpanel,Paintcomponent,我正在尝试用java绘制一幅带有类和层次结构的画图。但是我的绘图区域没有背景色(定义为白色),当我单击它时,它会在绘图的jpanel区域生成一个打印屏幕。使用super.paintComponent(g)时,界面看起来很好,但我每次只得到一个点。使用super.paintComponents(g)在jpanel区域打印帧 对发生的事有什么想法吗 public class MandaDesenhar extends JPanel { static int x; static int y; pri

我正在尝试用java绘制一幅带有类和层次结构的画图。但是我的绘图区域没有背景色(定义为白色),当我单击它时,它会在绘图的jpanel区域生成一个打印屏幕。使用super.paintComponent(g)时,界面看起来很好,但我每次只得到一个点。使用super.paintComponents(g)在jpanel区域打印帧

对发生的事有什么想法吗

public class MandaDesenhar extends JPanel
{
static int x;
static int y;

private static final long serialVersionUID = 1L;
int i = 0;

public void paintComponent(Graphics g)
{   
    super.paintComponents(g);

    if (Paint4Fun.lista.size() == 0)
        return;

    while (i<Paint4Fun.lista.size())
    {
        FormaPrimitiva forma = Paint4Fun.lista.get(i);
        forma.desenha(g);
        i++;
    }
}
公共类MandaDesenhar扩展了JPanel
{
静态int x;
静态智力;
私有静态最终长serialVersionUID=1L;
int i=0;
公共组件(图形g)
{   
超级组件(g);
如果(Paint4Fun.lista.size()==0)
返回;

而(i您应该在
paintComponent
方法中本地定义
i
,而不是在它之外,并在那里将它初始化为
0

否则,您总是只绘制列表中的新元素,而不是旧元素

编辑: 作为for循环,可以更好地编写循环:

for(int i = 0; i < Paint4Fun.lista.size(); i++) {
   FormaPrimitiva forma = Paint4Fun.lista.get(i);
   forma.desenha(g); 
}

一般来说,总是在尽可能小的范围内(这里是方法,甚至是循环)声明变量(如
i

工作得非常好。非常感谢,我在过去的5个小时里或多或少都在尝试解决这个问题。
for(FormaPrimitiva forma : Paint4Fun.lista) {
    forma.desenha(g);
}