208 votes

Java Swing revalidate () vs repaint ()

Je suis en train de constituer une application Swing où je veux souvent pour remplacer le contenu d'un Composite. Pour ce faire, je vais appeler removeAll(), puis l'ajout de mon nouveau contenu, puis de l'appel d' revalidate().

Cependant je trouve que l'ancien contenu est encore visible (bien que obscurcie par la le nouveau contenu). Si j'ajoute un appel à l' repaint() de plus de revalidate(), il fonctionne comme prévu.

Je suis sûr qu'en d'autres occasions, j'ai constaté que tout le qualifiant revalidate() est suffisant.

Donc en gros ma question est: dois - je besoin d'appeler les deux fonctions et si non, quand devrais-je appeler chacun d'entre eux?

154voto

kdgregory Points 21849

Je soupçonne que vous avez besoin à appeler repaint(), et peut-être de ne pas appeler revalidate(). L'ancien dit de Swing, une zone de la fenêtre est sale; le second indique le layout manager pour recalculer la mise en page. Ce qui devrait entraîner les enfants du groupe à repeindre, mais ne peut pas provoquer le panneau lui-même de le faire (voir ce pour la liste de repeindre les déclencheurs).

Sur un plan plus général: plutôt que de réutiliser le groupe spécial initial, je recommande la construction d'un nouveau groupe et d'échanger sur à la mère.

85voto

Noel Grandin Points 1773

Chaque fois que vous faites un remove () ou un removeAll (), vous devriez appeler

   validate();
  repaint();
 

après avoir complété add () les nouveaux composants.

L'appel de validate () ou revalidate () est obligatoire lorsque vous faites un remove () - voir les javadocs pertinents.

Mes propres tests indiquent que repaint () est également nécessaire. Je ne suis pas sûr exactement pourquoi.

58voto

akf Points 23518

revalidate est appelé sur un conteneur, une fois que les nouveaux composants sont ajoutés ou supprimés. cet appel est une instruction pour dire le layout manager pour réinitialiser basé sur la nouvelle liste des composants. revalidate déclenche un appel de repeindre ce que le composant pense sont sales des régions.' Évidemment pas toutes les régions sur votre JPanel sont considérés comme sales par l' RepaintManager.

repaint est utilisé pour indiquer un composant à repeindre. C'est souvent le cas, vous devez appeler cela pour le nettoyage des conditions telles que la vôtre.

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