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

Agents de placement/Fenêtres Java Discussion :

Problème récurent de rafraichissement de JFrame


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Problème récurent de rafraichissement de JFrame
    Bonjour à tous,

    Bon je sais que c'est un problème récurent, mais j'ai du mal avec le rafraichissement d'une JFrame.

    Je me suis créé un JPanel qui me sers d'image d'arrière plan. Dans cette classe j'ai donc redéfinit la méthode PaintComponent(Graphics g).
    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
     @Override
        protected void paintComponent(Graphics g) {
              super.paintComponent(g);      
            if (image == null) {
                return;
            }
     
            int x = 0;
            int y = 0;
            int width = 0;
            int height = 0;
     
            if (this.etirer) {
                width = this.getWidth();
                height = this.getHeight();
            } else {
                width = this.image.getWidth(this);
                height = this.image.getHeight(this);
                x = ((this.getWidth() - width) / 2);
                y = ((this.getHeight() - height) / 2);
            }
            g.drawImage(this.image, x, y, width, height, this);
     
        }
    Dans une JFrame je l'applique sur le contentPane en BorderLayout.CENTER.

    Si je ne mets rien dessus (label, textbox,....) souvent lors du démarrage, je n'ai pas l'image complète. Cela ressemble plus à quelques pixels répartit par endroits, ou a une ligne sur 2 correspondant à l'image et l'autre est de la couleur par défaut de la JFrame, c'est à dire gris.

    J'ai essayé les différentes méthodes, validate, invalidate, repaint,.. sans succès. J'appelle ces méthodes dans le constructeur lors du lancement.

    Donc que dois-je faire dans mon constructeur:
    validate sur la JFrame ou sur le JPanel?
    invalidate sur la JFrame ou sur le JPanel?
    repaint sur la JFrame ou sur le JPanel?
    ou quelle combinaison et ou? Dans le constructeur? Dans la méthode PaintComponent de mon JFrame?

    Je pense que ce problème est lié aux différents threads qui tourne avec l'affichage.

    je vous mets le constructeur de cette JFrame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public MaJFrame() {
            initComponents();
     
            this.setResizable(true);
            this.setLocation(100, 100);
            this.jPanelImageFond.setImage(Ressources.LINK_IMAGE_PRESENTATION);
            this.jPanelImageFond.setEtirer(true);
            this.setPreferredSize(this.jPanelImageFond.getPreferredSize());
            this.setSize(this.jPanelImageFond.getSize());
     
        }

    Je vous précise que je me sers du Designer de netbeans en majeur parti pour éviter de coder les choses de bas niveau du style "getContentPane().add(xxx), ...".

    Je vous remercie d'avance pour les réponses que vous pourriez me fournir
    Merci à tous.

  2. #2
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Bon je pense avoir trouvé la solution en supprimant la première ligne de paintcomponent de mon JPanel d'arrière plan.
    Le code devient donc:
    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
     
    protected void paintComponent(Graphics g) {
     
              //super.paintComponent(g);      
            if (image == null) {
                return;
            }
     
            int x = 0;
            int y = 0;
            int width = 0;
            int height = 0;
     
            if (this.etirer) {
                width = this.getWidth();
                height = this.getHeight();
            } else {
                width = this.image.getWidth(this);
                height = this.image.getHeight(this);
                x = ((this.getWidth() - width) / 2);
                y = ((this.getHeight() - height) / 2);
            }
            g.drawImage(this.image, x, y, width, height, this);
     
        }
    Je vous tiendrai au courant, si cela ne fonctionne pas tout le temps.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de placement de composants Jframe, Jpanel
    Par shensi dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 07/02/2008, 14h33
  2. Problème d'affichage de 2 JFrame
    Par youmdingding dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 28/08/2007, 08h57
  3. [Prototype] Timing / rafraichissement
    Par gdzami dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 20/06/2007, 14h59
  4. Problème vitesse de rafraichissement sous sdl
    Par sieuzac dans le forum SDL
    Réponses: 16
    Dernier message: 31/05/2007, 14h59
  5. Réponses: 3
    Dernier message: 29/04/2006, 22h06

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