IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

[Redimensionnement] paintComponent : on passe deux couches!


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut [Redimensionnement] paintComponent : on passe deux couches!
    Salut,

    Tâchons de faire au plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    import javax.swing.*;
    import java.awt.*;
     
    public class Panneau extends JPanel {
     
    	int compteur=0;
     
    	public void paintComponent(Graphics g) {
    		super.paintComponent(g);
    		System.out.println("Couche No "+compteur++);
    	}
     
    	public static void main(String[] args) {
    		JFrame f=new JFrame();
    		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		Container conteneur;
    		conteneur=f.getContentPane();
    //		conteneur=new Container();
    		conteneur.setLayout(new BorderLayout());
    		Panneau panneau=new Panneau();
    		panneau.setPreferredSize(new Dimension(300,200));
    		panneau.setBackground(Color.white);
    		conteneur.add(panneau);
    //		f.setContentPane(conteneur);
    		f.pack();
    		f.setVisible(true);
    	}
    }
    Si on enlève les //, c'est-à-dire en remplaçant le Content Pane par un nouveau Container, on voit qu'à chaque redimensionnement par glissement des bordures, paintComponent est appelé deux fois (trois fois pour un rétrécissement par le coin inférieur droit). Si on les remet, donc en utilisant le Content Pane d'origine, paintComponent est appelé une fois de moins. Pourquoi ?

    En outre, si l'on fait glisser une fenêtre tierce par dessus, les appels sont très nombreux. Le double buffering par défaut ne devrait-il pas éviter cela?

  2. #2
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Tu ne risques pas d'avoir le double buffering puisque Container n'est pas une classe Swing mais AWT. Remplace Container par JComponent ou JPanel et tu ne verras plus ces problemes.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 26
    Points : 14
    Points
    14
    Par défaut
    D'accord, merci pour ta réponse. En fait, j'avais bien constaté que le problème de l'appel supplémentaire disparaissaît avec un JPanel (est-ce un effet du double buffering?), mais par contre, les appels en grand nombre sont toujours là, ce qui peut être un peu fâcheux si l'affichage est complexe quand on n'utilise pas de BufferedImage.

  4. #4
    Gfx
    Gfx est déconnecté
    Expert éminent
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Points : 8 178
    Points
    8 178
    Par défaut
    Cela dépend de ta version de Java mais en pratique cela ne pose pas de problème, surtout si tu prends soin de respecter le clip du Graphics.

Discussions similaires

  1. Chargement de deux couche kml
    Par mounou81 dans le forum IGN API Géoportail
    Réponses: 1
    Dernier message: 25/04/2012, 15h48
  2. Redimensionnement : je ne passe pas dans OnSize()
    Par specialka dans le forum MFC
    Réponses: 2
    Dernier message: 09/07/2008, 11h30
  3. boucle while - passe deux fois dans la boucle.
    Par Benji01 dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/05/2008, 12h23
  4. Réponses: 1
    Dernier message: 22/09/2005, 20h39
  5. [VB.NET] comment superposé deux couches
    Par ero_senin dans le forum OpenGL
    Réponses: 1
    Dernier message: 17/01/2005, 08h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo