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 :

[awt] Problème de raffraichissement de composant


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [résolu] [awt] Problème de raffraichissement de composant
    Bonjour,

    J'ai un problème quand je veux changer un élement graphique deja affiché à l'écran puis afficher ces modifications.

    Pour le moment, je suis obligé de faire remove tous le composant a modifié ainsi que tous ceux qui le contienne, faire la modification, puis add tout les composants que j'avais supprimé puis, setvisible(true).

    N'y a-t-il pas une methode plus simple ? J'ai essayé repaint(), mais cela ne fonctionne pas.

    merci.

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Il y a sûrement plus simple en effet
    Quel type de modifications fais-tu sur tes composants ?
    Poste un peu de code pour voir d'où peut venir le problème...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Par exemple, j'ai une classe MainFrame qui implémente ma fenetre principale, l'un de ses attributs est un Panel mainPanel qui est le panel principal de la fenetre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class MainFrame {
      Panel mainPanel;
     
      MainFrame () {
        ...
        mainPanel = new Panel();
        ...
        add(mainPanel);
        setVisible(true);
      }
     
      void changerMainPanel () {
        ...
        mainPanel = new Panel();
        mainPanel.add(quelquesComposantsQuelconques);
        // et la je sais pas comment faire pour afficher correctement les changements
        ...
      }
    }
    Donc, un exemple raccourci, mais ça ressemble beaucoup à ce que je fais...

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mainPanel.revalidate();

  5. #5
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mainPanel.revalidate();

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    euh, pourquoi recrées-tu le mainPanel ?

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Si tu as plusieurs panels à gérer dans un même JFrame, utilise le CardLayout.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Il n'y a pas de methode revalidate() en awt, ni de CardLayout...

    et, je change le panel car le contenu de la fenetre doit changer. Comme il s'agit d'un programme qui demande une connexion ftp, au début, il n'y ds la fenetre qu'un seul bouton pour avoir une nouvelle session, quand on appuie dessus, un dialog apparait et on entre les données du compte ftp, puis, la connexion se crée et le contenu du ftp s'affiche, mais ds la meme fenetre que celle du début.

  9. #9
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Ok, j'avais pas vu que tu étais en awt
    pas de revalidate, on est d'accord, la séquence doit être alors, sous toutes réserves :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel.invalidate();
    panel.validate();
    Par contre CardLayout est bien dans le package java.awt

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai essayé de cette façon :
    mainPanel.invalidate();
    mainPanel = new MainGalleryPanel(session, this);
    mainPanel.validate();
    mainPanel.repaint();
    et de cette façon :

    mainPanel = new MainGalleryPanel(session, this);
    mainPanel.invalidate();
    mainPanel.validate();
    mainPanel.repaint();
    Mais ça ne marche pas du tout

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    (dslé pour le CardLayout... , je croyais l'avoir vu seulement en swing...)

  12. #12
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    comme tu recrées mainPanel, l'as-tu bien ajouté à MainFrame ?
    si tu l'ajoutes à MainFrame (en remplacement de l'ancien..), alors les méthodes invalidate et validate doivent s'appliquer sur MainFrame
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mainPanel = new MainGalleryPanel(session, this); 
    this.add(mainPanel); // this désigne l'objet de type MainFrame
                         // faire gaffe au layout de this...
                         // peut-être faire this.remove(mainPanel) avant le new...
    this.invalidate(); 
    this.validate();

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    ouais, ça marche bien comme ça merci. Mais au final, c'est plus ou moins ce que je faisais au début. Donc, si je veux changer une partie d'un sous-composant de mainPanel, dois completement le reconstruire. Au moins, je me casserais plus la tete à essayer de trouver plus simple et le invalidate/validate, c'est quand meme plus élégant qu'un setvisible(true).

    Merci beaucoup herve91.

  14. #14
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    C'est pour cela que je te conseillais le CardLayout, tu construis tes différents panels au préalable, et ensuite un simple show() permet de basculer sur le bon panel.
    A+

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

Discussions similaires

  1. Problème d'installation des composant Orpheus
    Par Claude l'ancien dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/06/2011, 12h01
  2. Réponses: 1
    Dernier message: 12/05/2009, 09h49
  3. Réponses: 3
    Dernier message: 01/08/2005, 21h32
  4. Réponses: 2
    Dernier message: 31/07/2005, 14h52
  5. [CONCEPTION MCD] Problème avec les clés composées
    Par fabriceMerc dans le forum Schéma
    Réponses: 3
    Dernier message: 14/02/2005, 09h43

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