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 :

Problème de rafraichissement du ContentPane


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut Problème de rafraichissement du ContentPane
    Bonjour, bonjour,
    Actuellement, je suis en stage et je dois faire une application pour un labo médical.

    Jusque là, aucun soucis, mais... comme vous avez du le devinez, jai un petit problème.
    L'application sert à faire des fiches de macroscopie, donc on choisit la fiche d'un organe dans la JMenuBar et qd l'organe est sélectionné, l'application enlève tt ds le ContentPane et ajoute le panel correspond à l'organe.

    Avant, l'affichage fonctionnait, mais j'utilisais la méthode pack() de JFrame, donc je pense que l'actualisation était forcée par l'utilisation de cette méthode, cependant, cela ne me donnait aucun contrôle sur la taille de la JFrame, donc jai viré ça et remplaçé par un setExtendedState(MAXIMIZED_BOTH) pr avoir la taille agrandie de la JFRAME, or, pour les fiches de macro, selon l'organe choisi ( ex : colon sigmoïde, colon transverse) il y a des JTextField et des JLabel qui ne doivent pas apparaître ( ce sont des champs spécifiques aux autres parties de l'organe), donc je change la visibilité.

    Donc, avec pack(), cela fonctionnait, mais maintenant, qd je rajoute le panel correspond a l'organe, je fais un f.getContentPane.removeAll() puis j'ajoute le panel et je fais un repaint sur le content pane, mais... le removeAll est bien pris en compte car si il y a déjà un organe de choisi, le panel sen va mais, pr afficher le nouveau panel, je suis obligé de rétrécir ou réduire la fenêtre.

    A chaque fois que j'ai eu un pb, j'ai regardé sur les fofo ou la javadoc et jai trouvé une solution à chaque fois mais là, les internautes disent de faire un repaint ou revalidate sur le container ( Jpanel ou ScroolPane) que jai essayé, mais cela ne marche pas... ah oui, les JPanel sont ajoutés dans un JScrollPane qui lui est ajouté ds le ContentPane, la totalité de l'intérieur de la fenêtre est occupé par le JScrollPane et le Panel de l'organe.

    Voili voilà, je joins un lien de ddl pr un fichier rar contenant le projet eclipse ( jutilise une api pr générer un pdf ), le jar et lexe de lappli.
    Dsl pour ce pavé et si il y a encore qques points obscurs, demandez moi ( et si vous estimez que mon code est sale ou mal optimisé, je suis preneur d'idées pr l'optimiser ^^)

    [EDIT :] j'ai oublié une petite précision, je vous file le projet mais je dis pas ds quelle classe se trouve le pb... ^^
    Cest ds la classe MenuListener que je retire le contenu du ContentPane et que j'ajoute le ScrollPane contenant le Panel du nouvel organe

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Bonjour,

    Je n'ai pas d/l tout ton code mais:
    Citation Envoyé par Zysce Voir le message
    pr afficher le nouveau panel, je suis obligé de rétrécir ou réduire la fenêtre.
    C'est le symptôme classique d'un revalidate manquant.

    Citation Envoyé par Zysce Voir le message
    faire un repaint ou revalidate sur le container ( Jpanel ou ScroolPane) que jai essayé, mais cela ne marche pas...
    Il faut faire la distinction entre repaint qui permet redessiner un composant uniquement (par exemple tu as un component qui affiche des images et l'image a changée) alors que revalidate permet de revalider le layout du container (c'est à dire tu as ajouté ou enlevé des enfants, du coup il faut recalculer leurs positions dans le parent).

    Citation Envoyé par Zysce Voir le message
    les JPanel sont ajoutés dans un JScrollPane qui lui est ajouté ds le ContentPane,
    Dans ce cas c'est sur le contentPane qu'il faut faire le revalidate après avoir changé son contenu.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 13
    Par défaut
    Bonjour, merci de cette réponse rapide, je ne comprenais pas vraiment la différence entre la méthode repaint et la méthode revalidate.
    Maintenant, cela fonctionne nickel ^^ merci
    La méthode revalidate n'existe pas pr le contentPane.
    Il m'a suffit de faire un validate sur le contentPane pr actualiser l'affichage.
    Je mets à disposition le code ici pr ceux que ça intéresse ( par contre les composants restent fixe lors des redimensionnements, je réglerais ça plus tard en changeant les contraintes du gridbag).

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Par défaut
    Content de savoir que ça fonctionne.

    Citation Envoyé par Zysce Voir le message
    La méthode revalidate n'existe pas pr le contentPane.
    Oui car revalidate() est une facilité introduite avec Swing pour invalider puis demander la revalidation alors que getContentPane() fait partie de l'API d'AWT.
    Mais c'est vrai que si on a ajouté ou retiré des components du container il ne reste plus qu'à le (re)valider.

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

Discussions similaires

  1. [MFC] Problème de rafraichissement,
    Par pykoon dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 07h21
  2. Problème de rafraichissement.
    Par beyo dans le forum ASP
    Réponses: 5
    Dernier message: 18/03/2005, 16h27
  3. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38
  4. [JTree]problème de rafraichissement
    Par peppena dans le forum Composants
    Réponses: 9
    Dernier message: 20/01/2004, 14h06
  5. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15

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