kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008
-
11 mars 2008 à 21:04
kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008
-
12 mars 2008 à 19:18
Bonjour,
J'essaie infructueusement de faire une classe héritée de JFrame et contenant une méthode permettant de changer le contenu de la JFrame. public void changerJPanel(JPanel pan);
Je rafraichis la JFrame qui ne contient qu'un JPanel avec ces méthodes :
getContentPane().removeAll();
getContentPane().add(pan);
getContentPane().validate();
Malheureusement, cela ne fonctionne pas parfaitement. Parfois, j'appelle un listener (au clic d'un bouton contenu dans le JPanel courant) qui appele cette méthode changerJPanel.
Le problème, qui se pose alors, est que la JFrame ne s'actualise pas vraiment, il faut promener la souris sur la JFrame pour que la rafraichissement se fasse petit à petit.
Connaitriez vous une astuce me permettant de modifier ma méthode changerJPanel pour corriger ce problème ? Pourriez vous m'expliquer le point faux de ma démarche ?
kishkaya
Messages postés365Date d'inscriptionsamedi 26 juin 2004StatutMembreDernière intervention17 avril 2008 12 mars 2008 à 19:18
Merci pour le tuyau mais le problème est plus profond.
En fait il faut dire explicitement que le JPanel est invalidate() et forcer le repainting repaint(). Je sais pas trop a quoi c'est du mais comme je fais plusieurs requetes en même temps sur plusieurs BDD différentes, qu'il y a plusieurs Thread en fond qui tournent avec du JNI, le repaint du JPanel n'est pas appelé explicitement. Quand je fais un petit demonstrateur de changer de JPanel ca marche nickel
Merci pour le conseille du CardLayout. Mais le voyage de JPanel en JPanel est non prévu, en fait il n'y a pas d'ordre. J'accede à un lecteur RFID Pcmia (grâce à une DLL) je récupère des infos dans le Tag RFID et j'interroge deux BDD (Mysql et DB2) en fonction des résultats on va vers tel ou vers tel autre JPanel.
Cependant ton exemple est adaptable à ce cas avec un int ou lieu d'un boolean.
Merci pour l'aide.
PS: pour ceux qui auraient des problèmes de repainting de JFrame, il arrive que le JPanel soit bien repaint mais que la JFrame ne le soit pas, on peut de la même manière forcer le refraichissement.