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

Composants Java Discussion :

JLabel qui se raffraichissent mal !


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut JLabel qui se raffraichissent mal !
    Bonjour,
    Je vous expose mon problème, je dispose d'une classe qui gère des données et qui les affiche sur mon JPanel suivant à travers la méthode : setTextJLabels(...) mais lorsqu'il affiche les nouveaux String dans les JLabels avec la méthode setText(), il affiche les nouveaux String sur les anciens sans faire de repaint() après, alors je fais le repaint() manuellement après la mise à jour des JLabels mais rien n'y fait !
    Voici mon code :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    package coco;
     
    import java.awt.Graphics;
    import java.awt.GridBagLayout;
    import java.awt.GridBagConstraints;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import javax.imageio.ImageIO;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    /**
     *
     * @author Womannosky
     */
    public class PanelTraitement extends JPanel {
        // Attributs
        private static final long serialVersionUID = 1L;    // une version
        private BufferedImage coucou;                          // une image
        private JLabel taille1;                     // un JLabel pour indiquer la taille 1 
        private JLabel taille2;                    // un JLabel pour indiquer la taille 2
     
        // Constructeur
        public PanelTraitement() {
            // Appelle le constructeur de JPanel et initialise le layout
            super(new GridBagLayout());
     
            // Initialise les JLabels
            taille1 = new JLabel("Taille 1 : 0 octets");
            taille2 = new JLabel("Taille 2 : 0 octets");
     
            try {
                // Charge l'image coucou
                coucou = ImageIO.read(getClass().getResource("/images/coucou.png"));
            } catch (IOException ex) {
                ex.printStackTrace();
            }
     
            // Initialise le GridBagLayout
            GridBagConstraints c = new GridBagConstraints();
     
            // Ajoute le JLabel taille1 au panel
            this.add(taille1, c);
            // Réinitialise le gridy du GridBagConstraints pour placer le deuxième JLabel en dessous du premier
            c.gridy+=2;
            // Ajoute le JLabel taille2 au panel
            this.add(taille2, c);
        }
     
        // Change le texte des JLabels
        public void setTextJLabels(String tailleO, String tailleC) {
            taille1.setText("Taille 1 : " + tailleO + " octets");
            taille2.setText("Taille 2 : " + tailleC + " octets");
            repaint(); // TODO: Marche pas !!
        }
     
        // On redéfinit la méthode paintComponent() pour afficher le graphique
        @Override
        public void paintComponent(Graphics g) {
            // Affiche l'image au centre du panel (en X)
            g.drawImage(coucou, this.getWidth()/2 - coucou.getWidth()/2, 0, this);
        }
    }
    Que fais-je de mal dans la définition de mon JPanel ? parceque là, je vois pas du tout. Le seul moyen que cela s'affiche correctement, c'est que je redimensionne la fenêtre et là, il fait le repaint()...
    Merci pour vos réponses...

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Ton problème vient du fait que les JLabel ne sont pas opaque il ne dessinent pas de fond mais simplement le texte.

    Or tu redéfinis la méthode paintComponent() de ton JPanel, et tu ne dessines pas le fond non plus, ce qui fait que malgré les repaint() la partie contenant les JLabel se contente a chaque fois de dessiner le texte "par dessus".

    Il faut rendre ton JPanel opaque, soit avec un fillRect(), soit tout simplement en appelant la méthode parente qui se chargera de respecter l'opacité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        @Override
        public void paintComponent(Graphics g) {
            // La méthode parente dessine le fond du composant
            super.paintComponent(g);
            // Affiche l'image au centre du panel (en X)
            g.drawImage(coucou, this.getWidth()/2 - coucou.getWidth()/2, 0, this);
        }
    a++

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Merci adiGuba, tu es toujours aussi doué à ce que je vois.
    Thanks !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/05/2008, 20h31
  2. Donner une couleur à un JLabel qui a un Border
    Par Goupo dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 16/01/2008, 13h35
  3. un composant qui s'efface mal
    Par vasilov dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 19/10/2006, 12h58
  4. menu qui se positionne mal
    Par peck dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2004, 23h24
  5. [MFC]dialogues qui s'initialisent mal
    Par Tsunamis dans le forum MFC
    Réponses: 4
    Dernier message: 25/03/2004, 12h57

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