Repainting Frame 擦除之前绘制的形状

Repainting Frame erases previously drawn shape

我目前正在 Java 中进行绘画,运行 遇到 repaint() 擦除之前绘制的形状的问题。这是我的问题的示例:

public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.LIGHT_GRAY);

        click.paintPiece(g);
    }

public void paintPiece(Graphics g) {
        int x = (getMouseX())*70 + 10;
        int y = mover.getRow()*70 + 10;
        g.fillOval(x, y, 50, 50);
    }

每次点击鼠标,都会在paintComponent()方法中调用paintPiece()方法。我由此遇到的问题是,创建新椭圆时,先前绘制的椭圆会被擦除。还需要注意的是,每次单击鼠标时,我都会重新绘制 window。如何在不擦除之前绘制的椭圆的情况下绘制新的椭圆?

  • 解决方案 1:创建一个 ArrayList<Ellipse2D> 并在单击鼠标时用新项目填充它。在您的 paintComponent(...) 方法中,遍历列表,绘制每个形状。
  • 解决方案 2:使用通过对 BufferedImage 调用 getGraphics() 获得的 Graphics 对象将椭圆绘制到 BufferedImage 上,然后在 paintComponent 方法中绘制该 BufferedImage。使用完后不要忘记处理 BI 的图形对象。