JPanel Initiation
p = new JPanel() {
private static final long serialVersionUID = 1L;
public void paintComponent(Graphics g) {
if(errors == 1)
g.drawOval(215, 50, 75, 75);
else if(errors == 2)
g.drawOval(200,200,200,200);
}
};
调用repaint
static void drawHead() {
System.out.println("Head");
errors = 1;
p.removeAll();
p.revalidate();
p.repaint();
}
repaint
我的框架看起来像这样,http://i.imgur.com/XQlQeul.png
然后看起来像http://i.imgur.com/RnVuUzt.png
我认为我的drawHead()
方法存在错误,但似乎无法解决问题。有谁知道发生了什么?我想要的结果将是第一张图片,但是插入了head
。
答案 0 :(得分:1)
在执行任何自定义绘画之前,您没有先调用super.paintComponent
,从而打破了画颜链
Graphics
是共享资源,在绘制周期中绘制的每个组件都将共享相同的Graphics
上下文,这意味着以前绘制到Graphics
上下文的任何内容都将保留,除非你清楚了。
paintComponent
的一项工作是通过填充组件的背景颜色来为绘画准备Graphics
上下文