# Java > Interfaces Graphiques en Java > AWT/Swing >  Validate() ou revalidate()

## firgon

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 entirement de JLabel qui affichent des icon, dont je modifie le contenu au fur et a mesure de l'execution.

Je rencontre constamment des problmes pour ractualiser 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() ds que je change l'icone d'un JLabel.
puis JPanelContenant.validate() dans la foule. 
Il semble que ce ne soit pas a.

Merci de votre aide.

----------


## natha

Pas du tout.
Si tu changes l'icne 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).

----------


## firgon

merveilleux, merci !

Autre petite question dans le mme ordre :

J'ai un tableau de JLabel (JLabeltableau [][]) que j'ai rajout lment par lment  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 mme signification et le mme effet? ou bien est ce qu'il faut que j'utilise uniquement la premire instruction au motif que c'est JLabeltableau qui a t dpos dans mon JPanel.

----------


## natha

> Parfois je modifie un JLabel :
> 
> JLabeltableau [4][9] = MonJLabel;


Ce bout de code seul va changer ton JLabel rfrenc 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).




> JLabeltableau [4][9].repaint();
> 
> et 
> 
> MonJLabel.repaint();
> 
> auront la mme signification et le mme effet?


A ton avis ?
Fait l'exprience.
 :;):

----------


## firgon

> Ce bout de code seul va changer ton JLabel rfrenc 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...

----------


## natha

Changer un JLabel par un autre c'est dommage (et consommateur de ressources).
Tu as toutes les mthodes qu'il faut  disposition pour mettre  jour ton label existant.
*setText
setIcon*

----------


## firgon

> Changer un JLabel par un autre c'est dommage (et consommateur de ressources).
> Tu as toutes les mthodes 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 particulires, cliquables, avec des variables en mmoire et tout et tout, mais je vais repenser tout a... 

Je te remercie Natha de t'tre pencher sur l'abme de mes connaissances, promis je vais bosser tout a.

Merci merci.

----------


## a+polux

Salut,

J'ai aussi un problme de redimensionnement mais portant sur un jPanel.

En cliquant sur un jCheckBox (Recherche avance), je dois pouvoir ajouter des options supplmentaires (option 1, option 2, etc..) et agrandir mon jPanel. 
Voir images suivantes.





et donc dans le bouton "Recherche avance" j ai mis le code suivant :



```

```

Mais a ne fonctionne pas, les options apparaissent et disparaissent mais le JPanel reste toujours de la mme taille.

Quelqu'un saurait me dpanner?

----------


## sinok

PLutt que de rendre les boutons visibles contente toi de rendre le panel visible ou invisible
Ca devrait suffire.

----------


## a+polux

Mais si je fais disparaitre le panel je fais disparaitre les composants que j'ai sur la premire image, ce que je ne veux pas.

----------


## sinok

Bah il te suffit d'ajouter tes composants optionnels  un JPanel spcifique que tu inclues ensuite  ton JPanel de recherche. Puis tu controles la visibilit du panel contenant les options avancs.

----------


## a+polux

Dj merci pour les rponses  :;): 

Oui mais mon problme 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 avance. 
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  ::?:

----------


## adiGuba

Salut,




> Mais pour l'instant a ne marche pas


C'est  dire ? Quel est le problme ???

a++

----------


## sinok

Utilise un setPreferredSize suivi d'un revalidate pour affecter la taille.
Le setSize ne sert  rien.

----------


## a+polux

> Salut,
> 
> 
> C'est  dire ? Quel est le problme ???
> 
> a++


Ben le jPanel ne se resize pas du tout, il reste toujours de la mme taille.




> Utilise un setPreferredSize suivi d'un revalidate pour affecter la taille.
> Le setSize ne sert  rien.


Dans le bouton Recheche avance j'ai mis le code suivant :


```

```

Mais toujours pas de redimensionnement du jPanel nomm pan_principal.

----------


## adiGuba

Et ton panel il est plac o ?

 ::arrow::  la taille d'un composant dpend de layout de son composant parent...

a++

----------


## a+polux

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?

----------


## a+polux

Mouai je sais toujours pas pq a ne marchait pas mais j'ai procd autrement.

----------

