Panel.repaint();弄乱了布局

时间:2014-05-14 05:45:26

标签: java swing jpanel paintcomponent

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

1 个答案:

答案 0 :(得分:1)

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

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

paintComponent的一项工作是通过填充组件的背景颜色来为绘画准备Graphics上下文