Panel.repaint(); 弄乱了布局

JPanel启动

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://sofzh.miximages.com/java/XQlQeul.png

然后看起来像这样, http://i.imgur.com/RnVuUzt.png

我在想我的drawHead()方法有一个错误,但我似乎无法解决这个问题。 有谁知道发生了什么? 我想要的结果将是第一张图片,但是画了一个head

在执行任何自定义绘制之前,您没有先调用super.paintComponent ,从而打破了绘制链

Graphics是共享资源,在绘制周期中绘制的每个组件将共享相同的Graphics上下文,这意味着除非您清除它,否则之前绘制到Graphics上下文的任何内容都将保留。

paintComponent一个工作是通过使用组件的背景颜色填充Graphics上下文