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 :

Validate() ou revalidate()


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut Validate() ou revalidate()
    Bonjour,

    j'ai beau avoir lu et relu tous les tutos que j'ai pu trouver impossible de m'en sortir.

    Ce que je cherche à faire est pourtant simple.

    J'ai une JFrame, un JPanel qui contient un autre JPanel (avec un gridLayout).

    Mon gridLayout est composé entièrement de JLabel qui affichent des icon, dont je modifie le contenu au fur et a mesure de l'execution.

    Je rencontre constamment des problèmes pour réactualiser le contenu de mes JLabel.

    En fait, je ne maitrise pas bien les validate() et revalidate(). Quand dois-je les utiliser et pour quels conteneurs ?

    J'avais compris qu'il fallait faire JLabeltrucmuch.revalidate() dès que je change l'icone d'un JLabel.
    puis JPanelContenant.validate() dans la foulée.
    Il semble que ce ne soit pas ça.

    Merci de votre aide.

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Pas du tout.
    Si tu changes l'icône d'un JLabel et que le label ne change pas de taille, tu dois simplement appeler repaint().
    (re)validate servent a reconstruire la taille et la position des composants au sein d'un layoutmanager en cas de modification "majeure" (e.g. suppression de composants, ajouts de composants, modification de la taille de composants).

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut
    merveilleux, merci !

    Autre petite question dans le même ordre :

    J'ai un tableau de JLabel (JLabeltableau [][]) que j'ai rajouté élément par élément à mon JPanel. Parfois je modifie un JLabel :

    JLabeltableau [4][9] = MonJLabel;

    Si par la suite, je veux repeindre ce JLabel est ce que :

    JLabeltableau [4][9].repaint();

    et

    MonJLabel.repaint();

    auront la même signification et le même effet? ou bien est ce qu'il faut que j'utilise uniquement la première instruction au motif que c'est JLabeltableau qui a été déposé dans mon JPanel.

  4. #4
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par firgon Voir le message
    Parfois je modifie un JLabel :

    JLabeltableau [4][9] = MonJLabel;
    Ce bout de code seul va changer ton JLabel référencé dans ton tableau mais pas le JLabel affiché à l'écran (à priori, car je ne sais pas comment tu as construit le reste de ton code).

    Citation Envoyé par firgon Voir le message
    JLabeltableau [4][9].repaint();

    et

    MonJLabel.repaint();

    auront la même signification et le même effet?
    A ton avis ?
    Fait l'expérience.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut
    Citation Envoyé par natha Voir le message
    Ce bout de code seul va changer ton JLabel référencé dans ton tableau mais pas le JLabel affiché à l'écran (à priori, car je ne sais pas comment tu as construit le reste de ton code).
    Aie, aie, aie... C'est ça que je n'avais pas pigé !!!

    Bon ben... merci pour tout, j'ai plus qu'à revoir mon code...

    Si quelqu'un à une solution...

  6. #6
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Changer un JLabel par un autre c'est dommage (et consommateur de ressources).
    Tu as toutes les méthodes qu'il faut à disposition pour mettre à jour ton label existant.
    setText
    setIcon

  7. #7
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 127
    Par défaut
    Citation Envoyé par natha Voir le message
    Changer un JLabel par un autre c'est dommage (et consommateur de ressources).
    Tu as toutes les méthodes qu'il faut à disposition pour mettre à jour ton label existant.
    setText
    setIcon
    Oui, tu as raison, c'est ce que j'avais fait dans un premier temps, mais je pensais pouvoir passer par des MonJLabel avec des fonctions particulières, cliquables, avec des variables en mémoire et tout et tout, mais je vais repenser tout ça...

    Je te remercie Natha de t'être pencher sur l'abîme de mes connaissances, promis je vais bosser tout ça.

    Merci merci.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    Salut,

    J'ai aussi un problème de redimensionnement mais portant sur un jPanel.

    En cliquant sur un jCheckBox (Recherche avancée), je dois pouvoir ajouter des options supplémentaires (option 1, option 2, etc..) et agrandir mon jPanel.
    Voir images suivantes.





    et donc dans le bouton "Recherche avancée" j ai mis le code suivant :

    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
     boolean b= false;
     
            b=bout_rech_avan.isSelected();
     
            if(b==true)
                {pan_principal.setSize(500,500);    //J'agrandis le jPanel pan_principal et fait afficher toutes les options si true.
                bout_opt1.setVisible(true);
                bout_opt2.setVisible(true);
                text_2.setVisible(true);
     
     
            }
            else
                {pan_principal.setSize(250,250);   //Je réduis le jPanel pan_principal et fait disparaitre toutes les options si false.
                 bout_opt1.setVisible(false);
                bout_opt2.setVisible(false);
                text_2.setVisible(false);
     
     
            }
       pan_principal.revalidate();
           }
    Mais ça ne fonctionne pas, les options apparaissent et disparaissent mais le JPanel reste toujours de la même taille.

    Quelqu'un saurait me dépanner?

  9. #9
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    PLutôt que de rendre les boutons visibles contente toi de rendre le panel visible ou invisible
    Ca devrait suffire.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    Mais si je fais disparaitre le panel je fais disparaitre les composants que j'ai sur la première image, ce que je ne veux pas.

  11. #11
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah il te suffit d'ajouter tes composants optionnels à un JPanel spécifique que tu inclues ensuite à ton JPanel de recherche. Puis tu controles la visibilité du panel contenant les options avancés.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    Déjà merci pour les réponses

    Oui mais mon problème sera toujours la, cad qu'il faudra que je modifie la taille de mon jPanel de recherche lorsque j'y inclurais mon JPanel d'option avancée.
    En fait c'est surtout avec le redimensionnement des jPanel que j'ai du mal.

    Pour cela l'instruction NomPanel.setSize (L,l) ne suffit pas, il faut apparemment que j'ajoute quelque part NomPanel.revalidate() dans mon code. Mais pour l'instant ça ne marche pas

  13. #13
    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,

    Citation Envoyé par a+polux Voir le message
    Mais pour l'instant ça ne marche pas
    C'est à dire ? Quel est le problème ???

    a++

  14. #14
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Utilise un setPreferredSize suivi d'un revalidate pour affecter la taille.
    Le setSize ne sert à rien.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    C'est à dire ? Quel est le problème ???

    a++
    Ben le jPanel ne se resize pas du tout, il reste toujours de la même taille.

    Citation Envoyé par Sinok
    Utilise un setPreferredSize suivi d'un revalidate pour affecter la taille.
    Le setSize ne sert à rien.
    Dans le bouton Recheche avancée j'ai mis le code suivant :
    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
    {    boolean b= false;
    
            b=bout_rech_avan.isSelected();
    
            if(b==true)
                {pan_principal.setPreferredSize(new java.awt.Dimension(371, 210));   //remplacement setSize par setPreferredSize
                 
                bout_opt1.setVisible(true);
                bout_opt2.setVisible(true);
                text_2.setVisible(true);
                
                
            }
            else
                {pan_principal.setPreferredSize(new java.awt.Dimension(150, 108));   //remplacement setSize par setPreferredSize
                bout_opt1.setVisible(false);
                bout_opt2.setVisible(false);
                text_2.setVisible(false);
                
                
            }
       pan_principal.revalidate();
    
           }
    Mais toujours pas de redimensionnement du jPanel nommé pan_principal.

  16. #16
    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
    Et ton panel il est placé où ?

    la taille d'un composant dépend de layout de son composant parent...

    a++

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    Il est placé dans un jFrame.

    Il y a un type de Layout plus approprié que d'autre (Free Design, Absolute Layout, Border Layout, Box Layout, etc...) pour le redimensionnement d'un jPanel?

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 28
    Par défaut
    Mouai je sais toujours pas pq ça ne marchait pas mais j'ai procédé autrement.

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

Discussions similaires

  1. validate() ? revalidate() ? rePaint() ?
    Par hoook dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 16/05/2013, 17h47
  2. validation d'un XML schema
    Par nicolas_jf dans le forum Valider
    Réponses: 2
    Dernier message: 05/05/2003, 11h25
  3. est ce un XSchema Valide?
    Par Slash dans le forum Valider
    Réponses: 4
    Dernier message: 06/03/2003, 14h01
  4. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  5. [VB6] Evenement validate
    Par grosjej dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/09/2002, 15h46

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