Dans votre implémentation de JPanel, les rectangles disparaissent car la méthode paint() écrase les dessins précédents. Pour éviter cela, nous modifions notre approche :
Au lieu de dessiner directement sur le JPanel, nous utilisons une BufferedImage (canvasImage) comme surface de peinture. Cela nous permet de modifier l'image de manière permanente sans affecter les dessins précédents.
Voici une méthode paint() modifiée qui utilise canvasImage pour le dessin :
<code class="java">@Override public void paint(Graphics g) { super.paint(g); // Handle inherited painting tasks Graphics2D bg = (Graphics2D) g; bg.drawImage(canvasImage, 0, 0, this); }</code>
Initialisez canvasImage dans votre constructeur JPanel comme ceci :
<code class="java">canvasImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);</code>
Et définissez son contexte graphique pour le dessin :
<code class="java">Graphics2D cg = canvasImage.createGraphics(); cg.setColor(Color.WHITE); cg.fillRect(0, 0, width, height);</code>
Maintenant, votre méthode DrawRect() peut modifier directement canvasImage :
<code class="java">public void DrawRect(int x, int y, int size, Color c) { Graphics2D cg = canvasImage.createGraphics(); cg.setColor(c); cg.fillRect(x, y, size, size); }</code>
Cette approche offre plusieurs avantages :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!