Java使用super.paintComponents(g)的问题,它会生成一个打印屏幕

时间:2011-06-13 22:42:04

标签: java swing jpanel paintcomponent

我正在尝试使用类和层次结构在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++;
    }
}

1 个答案:

答案 0 :(得分:3)

您应该在i方法中本地定义paintComponent,而不是在其外部,并在那里将其初始化为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)。