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