Maison >Java >javaDidacticiel >Comment dessiner des rectangles de manière permanente dans un JPanel : utiliser BufferedImages pour éviter l'écrasement ?

Comment dessiner des rectangles de manière permanente dans un JPanel : utiliser BufferedImages pour éviter l'écrasement ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 04:58:02732parcourir

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

Dessiner des rectangles de manière permanente

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 :

Utiliser une BufferedImage comme surface de peinture

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.

Méthode paint() personnalisée

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>

Création de BufferedImage et configuration

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>

Dessiner des rectangles sur BufferedImage

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>

Fonctionnalités supplémentaires

Cette approche offre plusieurs avantages :

  • Dessin persistant : Les rectangles sont dessinés de manière permanente sur BufferedImage.
  • Dessin optimisé : Au lieu de repeindre l'intégralité du JPanel, seules les parties modifiées du Les images sont mises à jour.
  • Prend en charge Annuler/Rétablir (Potentiel) : En gardant une trace des modifications apportées à l'image, vous pouvez implémenter la fonctionnalité Annuler/Rétablir.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn