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:
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.
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);
}
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);
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);
}
Este enfoque proporciona varios beneficios:
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