"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como desenhar retângulos permanentemente em um JPanel: usando BufferedImages para evitar sobrescrições?

Como desenhar retângulos permanentemente em um JPanel: usando BufferedImages para evitar sobrescrições?

Publicado em 2024-11-11
Navegar:840

How to Draw Rectangles Permanently in a JPanel: Using BufferedImages to Avoid Overwriting?

Desenhando retângulos de maneira permanente

Em sua implementação JPanel, os retângulos desaparecem porque o método paint() substitui os desenhos anteriores. Para evitar isso, modificamos nossa abordagem:

Usando uma BufferedImage como superfície de pintura

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.

Método paint() personalizado

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);
}

Criando o BufferedImage e configurando-o

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);

Desenhando retângulos no BufferedImage

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);
}

Recursos adicionais

Essa abordagem oferece vários benefícios:

  • Desenhamento persistente: retângulos são desenhados permanentemente na BufferedImage.
  • Desenho Otimizado: Em vez de repintar todo o JPanel, apenas as partes modificadas da imagem são atualizado.
  • Suporta desfazer/refazer (potencial): Ao acompanhar as alterações na imagem, você pode implementar a funcionalidade de desfazer/refazer.
Tutorial mais recente Mais>

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