Java问题与super.paintComponents(g)一起使用,它使屏幕变成打印屏幕

|| 我试图用类和层次结构在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++;
    }
}
    
已邀请:
        您应该在
paintComponent
方法中本地定义
i
,而不是在其外部定义,然后将其初始化为
0
。 否则,您总是只绘制列表中的新元素,而不是旧元素。 编辑: 您可以将循环更好地编写为for循环:
for(int i = 0; i < Paint4Fun.lista.size(); i++) {
   FormaPrimitiva forma = Paint4Fun.lista.get(i);
   forma.desenha(g); 
}
甚至更清楚地:
for(FormaPrimitiva forma : Paint4Fun.lista) {
    forma.desenha(g);
}
通常,总是在尽可能小的范围内(这里是方法,甚至是循环)声明变量(如此处的
i
)。     

要回复问题请先登录注册