"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo dibujar rectángulos de forma permanente en un JPanel: usar imágenes almacenadas en búfer para evitar la sobrescritura?

¿Cómo dibujar rectángulos de forma permanente en un JPanel: usar imágenes almacenadas en búfer para evitar la sobrescritura?

Publicado el 2024-11-11
Navegar:576

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

Dibujar rectángulos de manera permanente

En su implementación de JPanel, los rectángulos desaparecen porque el método paint() sobrescribe los dibujos anteriores. Para evitar esto, modificamos nuestro enfoque:

Usar una imagen en búfer como superficie de pintura

En lugar de dibujar directamente en el JPanel, usamos una imagen en búfer (imagen de lienzo) como nuestra superficie de pintura. Esto nos permite modificar la imagen permanentemente sin afectar los dibujos anteriores.

Método paint() personalizado

Aquí hay un método paint() modificado que usa canvasImage para dibujar:

@Override
public void paint(Graphics g) {
    super.paint(g); // Handle inherited painting tasks

    Graphics2D bg = (Graphics2D) g;
    bg.drawImage(canvasImage, 0, 0, this);
}

Creando BufferedImage y configurándola

Inicializa canvasImage en tu constructor JPanel de esta manera:

canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Y establezca su contexto gráfico para dibujar:

Graphics2D cg = canvasImage.createGraphics();
cg.setColor(Color.WHITE);
cg.fillRect(0, 0, width, height);

Dibujar rectángulos en BufferedImage

Ahora, su método DrawRect() puede modificar canvasImage directamente:

public void DrawRect(int x, int y, int size, Color c) {
    Graphics2D cg = canvasImage.createGraphics();
    cg.setColor(c);
    cg.fillRect(x, y, size, size);
}

Funciones adicionales

Este enfoque proporciona varios beneficios:

  • Dibujo persistente: los rectángulos se dibujan permanentemente en la imagen almacenada en el búfer.
  • Dibujo optimizado: en lugar de volver a pintar todo el JPanel, solo se actualizan las partes modificadas de la imagen.
  • Admite Deshacer/Rehacer (potencial): Por Al realizar un seguimiento de los cambios en la imagen, puede implementar la funcionalidad deshacer/rehacer.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3