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
Libérer: 2024-10-29 04:58:02
original
730 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal