123 votes

Différence entre validate(), revalidate() et invalidate() dans Swing GUI

Composants Swing disposez de plusieurs méthodes liés aux mises à jour de la disposition à l'écran, en particulier:

La documentation de Java définit ces quelque peu d'un point de vue technique, mais il n'est pas particulièrement claire de la façon dont ils sont destinés à être utilisés.

Quelle est la différence entre ces, et dans ce cas vous ne devez utiliser l'un plutôt que les autres?

74voto

StanislavL Points 31343

Juste mon humble avis. Pas sûr que c'est 100% correct.

invalidate() marques le conteneur comme non valide. Le contenu est quelque chose de mauvais et doit être relayé. Mais c'est juste une sorte de marque/drapeau. Il est possible que plusieurs invalide les contenants doivent être actualisées plus tard.

validate() effectue nouvelle disposition. Cela signifie un contenu non valide est demandé pour toutes les tailles et de tous les sous-composants tailles sont fixés aux valeurs propres en LayoutManager.

revalidate() est simplement la somme des deux. Il marque le conteneur comme non valide et effectue la mise en page du conteneur.

72voto

nIcE cOw Points 16890

validate() : Dans les Swing lorsque vous créez des Composants, il n'est pas valid - dire qu'il est valide de propriété est - false. Un composant est dit pour être valide, quand c'est la largeur, la hauteur, l'emplacement et la substance a été déterminée. Ceci est habituellement fait par l'appel de leur validate() méthode, directement ou indirectement. Lorsque nous appelons validate() sur les contenants, il permettra de valider le conteneur (si elle n'est pas valide) par l'appel de sa doLayout() méthode, qui, en général appellera l' LayoutManager. Maintenant, chaque enfant placé sur ce conteneur sera validé de manière récursive, de sorte que la totalité de l'arbre sera aménagé et deviendra valide.

revalidate() : revalidate() sera appelé lorsque vous modifiez un attribut qui aurait une incidence sur leur largeur/hauteur et l'appeler repaint() lorsque vous modifiez un attribut qui aurait une incidence sur leur apparence. Par Exemple, Si votre JFrame contient un JPanel, maintenant à certain point de temps que vous avez supprimé JPanel et inséré un nouveau à sa place, selon le contenu de la nouvellement installé JPanel, la taille des composants à l'intérieur de l' JPanel ainsi que The CONTAINER lui-même (en vertu de la disposition du gestionnaire utilisés par celui-ci), les changements. Ce qui le pousse à les invalider l'état. Afin de valider cette modification, vous devez appeler explicitement revalidate().

invalidate() : C'est quelque chose, je n'avais jamais utilisé, donc peut-être pas beaucoup de l'info que je peux donner. Mais il semble que le scénario présenté ci-dessus, peut donner un peu d'astuce, comme ce qui se passe dans invalidate().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X