绘制的图形在调整大小时闪烁然后消失window

Drawn graphics flicker and then disappear when resizing window

这里的目标是我可以单击颜色和形状,然后单击图形面板上的两个点。该彩色形状填充在图形面板上,我可以在彼此之上添加形状等。我还需要在图形面板的一角显示当前日期,在所有绘制的形状之上。我能够创建形状(尽管它们总是覆盖日期)没问题,但每当我调整 window 的大小或最小化时,所有绘制的形状都会消失。我已经尝试从 Graphics 中实现很多不同的方法(更新、绘制、重绘等),但还没有找到可以解决此问题的方法。我以为 paintComponent() 会处理所有这些,但显然不是。随时指出可以以更好的方式实施的任何内容,总是乐于学习新知识。

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            drawFigures();
            figuresPanel.add(dateLabel, c);
        }

        @Override
        public Dimension getPreferredSize() {
            return (new Dimension(800, 600));
        }

        private void addFigure(Figure figure) {
            figureList.add(figure);
            listArea.append(figure.toString() + "\n");
            figure.fill(getGraphics());
        }

        private void drawFigures() {
            for (Figure f : figureList) {
                f.fill(getGraphics());
            }
        }

我会建议一些可能对您有帮助的事情。

  1. 在你的方法drawFigures()中而不是使用getGraphics(),你为什么不把paintComponentMethodGraphics的实例作为参数传递到方法并使用它来绘制对象。这将确保您在用于绘画的 Graphics 的同一实例上绘图。

  2. 在您的方法 addFigure(Figure figure) 中,我建议您删除行 figure.fill(getGraphics());,以完全绘制对象。而是在 mouseClicked(MouseEvent event) 方法中 switch 语句后插入:

    revalidate();
    repaint();
    

    这实际上应该注意对象的绘制是在用于显示组件的同一个 Graphics 对象上完成的。

希望对您有所帮助。