Em sua implementação JPanel, os retângulos desaparecem porque o método paint() substitui os desenhos anteriores. Para evitar isso, modificamos nossa abordagem:
Em vez de desenhar diretamente no JPanel, usamos uma BufferedImage (canvasImage) como nossa superfície de pintura. Isso nos permite modificar a imagem permanentemente sem afetar os desenhos anteriores.
Aqui está um método paint() modificado que usa canvasImage para desenho:
@Override
public void paint(Graphics g) {
super.paint(g); // Handle inherited painting tasks
Graphics2D bg = (Graphics2D) g;
bg.drawImage(canvasImage, 0, 0, this);
}
Inicialize canvasImage em seu construtor JPanel assim:
canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
E defina seu contexto gráfico para desenho:
Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);
Agora, seu método DrawRect() pode modificar canvasImage diretamente:
public void DrawRect(int x, int y, int size, Color c) {
Graphics2D cg = canvasImage.createGraphics();
cg.setColor(c);
cg.fillRect(x, y, size, size);
}
Essa abordagem oferece vários benefícios:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3