一尘不染

Panel.repaint(); 弄乱布局

java

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://i.imgur.com/XQlQeul.png

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

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


阅读 459

收藏
2020-12-03

共1个答案

一尘不染

您在super.paintComponent执行任何自定义绘画之前未先致电就中断了绘画链

Graphics如果是共享资源,则在绘制周期中绘制的每个组件都将共享相同的Graphics上下文,这意味着以前为Graphics上下文绘制的所有内容都将保留,除非您清除它。

的工作之一paintComponentGraphics通过使用组件的背景色填充绘画准备上下文

2020-12-03