"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > 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 ?

Publié le 2024-11-11
Parcourir:152

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 dessiner :

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

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

Création de BufferedImage et configuration

Initialisez canvasImage dans votre constructeur JPanel comme ceci :

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

Et définir son contexte graphique pour dessin :

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

Dessiner des rectangles sur BufferedImage

Maintenant, votre méthode DrawRect() peut modifier directement canvasImage :

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

Fonctionnalités supplémentaires

Cette approche offre plusieurs avantages :

  • Dessin persistant : les rectangles sont dessinés en permanence sur l'image tamponnée.
  • Dessin optimisé : Au lieu de repeindre l'intégralité du JPanel, seules les parties modifiées de l'image sont mis à jour.
  • Prend en charge l'annulation/la restauration (potentiel) : en gardant une trace des modifications apportées à l'image, vous pouvez implémenter la fonctionnalité d'annulation/rétablissement.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3