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 :

Panel et problème d'affichage


Sujet :

AWT/Swing Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 4
    Par défaut Panel et problème d'affichage
    Bonjour à tous.

    J'ai un soucis avec mon code en java. En effet j'ai un problème avec mes Panels.
    En fait dans mon code je crée dynamiquement des panels, en fonction du besoin, et je les fait apparaitre les un après les autres sur mon applet.
    De ce fait on peut rapidement voir mon applet comme cela :

    Panel 1
    Panel 2

    Panel 3
    ...

    Le probème survient si je veux faire apparaître Panel 1, 2 de type panel_bloquee et Panel 3 de type panel_attente.
    A ce moment la Panel 1 n'apparaît plus. Pourtant pour mes tests, si je ne fais pas appraître Panel 3 tout s'affcihe sans problème.

    Voici les grandes lignes du code :

    public class gestionnaire_mapage {
    private applet applet;
    private MaPage panel;
    private MapageOffreBloquee[] panel_bloquee;
    private MapageOffreEnAttente[] panel_attente;
    ...
    public gestionnaire_mapage() {
    }

    public gestionnaire_mapage(applet _applet) {
    this.panel = new MaPage(this);
    this.applet = _applet;
    ....
    }

    public void afficher(utilisateur _utilisateur){
    this.applet.add(this.panel,new org.netbeans.lib.awtextra.AbsoluteConstraints(225, 0, 670, 768),-1);
    this.configuration_page();
    ....
    }

    public void cacher(){
    this.panel.setVisible(false);
    this.panel.validate();
    this.applet.remove(this.panel);
    this.applet.validate();
    }

    public void afficherOffreBloquee(int numero){
    int hauteur = numero*(30) + 150;
    this.applet.add(this.panel_bloquee[numero],new org.netbeans.lib.awtextra.AbsoluteConstraints(230, hauteur, -1, -1),1);
    this.applet.validate();
    }

    public void afficherOffreEnAttente(int numero){
    int hauteur = numero*(30) + 330;
    this.applet.add(this.panel_attente[numero],new org.netbeans.lib.awtextra.AbsoluteConstraints(230, hauteur, -1, -1),1);
    this.applet.validate();

    }

    public void configuration_page(){
    ...

    for(int i=0; i < this.liste_bloque[0]; i++){
    ...
    this.afficherOffreBloquee(i);
    this.panel.set_nbOffreBloquee(i+1);
    }
    ...
    for(int i=0; i < this.liste_attente[0]; i++){
    ...
    this.afficherOffreEnAttente(i);
    this.panel.set_nbOffreEnAttente(i+1);
    }
    }
    J'espère avoir été assez claire.
    Merci pour vos conseils.

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Tu as un layout CardLayout qui te permet de faire ça... Un peu comme JTabbedPane mais sans les onglets...

  3. #3
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    J'ai pas compris tout ton problème, mais bon voilà, y a un truc avec les panels :
    Si tu fais par exemple un setPanel(JPanel) en retirant le panneau mainpanel et en le remplaçant par le panneau newPanel, tu dois faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public void setPanel(JPanel newPanel)
        {
            if(mainPanel != null)
                panel.remove(mainPanel);
            mainPanel = newPanel;
            panel.add(mainPanel, BorderLayout.SOUTH);
            panel.updateUI();
        }
    La ligne panel.updateUI() (composant à mettre à jour) est très importante, sinon ça bugge dans 'affichage (soit ça fait rien, soit ça plante l'application,...).

    Voilà je sais pas si j'ai répondu à ta question, j'espère au moins avoir pu t'aider.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Razgriz
    La ligne panel.updateUI() (composant à mettre à jour) est très importante, sinon ça bugge dans 'affichage (soit ça fait rien, soit ça plante l'application,...).
    Euh, je ne vois pas pourquoi .updateUI() est nécessaire... ça marche directement sans cette ligne normalement (si tout est correctement exécuté à partir de l'EDT en tout cas). J'ai déjà fait ça sans updateUI() (même si le mieux dans ce cas est d'utiliser un CardLayout, c'est fait pour ça)

  5. #5
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Ah lol ben si tu le dis... Moi dans mes GUI ça marche pas sans cette ligne...

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Razgriz
    Ah lol ben si tu le dis... Moi dans mes GUI ça marche pas sans cette ligne...
    Ah oui, effectivement, sans .validate() ça ne marche pas.
    Je ne sais pas ce que updateUI() fait de plus que validate(), mais ça marche aussi avec updateUI()...

  7. #7
    Membre éclairé Avatar de Razgriz
    Profil pro
    Professeur / chercheur en informatique / mathématiques
    Inscrit en
    Avril 2006
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Professeur / chercheur en informatique / mathématiques

    Informations forums :
    Inscription : Avril 2006
    Messages : 391
    Par défaut
    Bah ça doit l'une des deux méthodes doit être une mise à jour de l'autre... Faut demadner à Sun lol

  8. #8
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    N'appelle pas updateUI(), appelle revalidate(). Cette dernière force à recalculer le layout tandis qu'updateUI() fait bien plus, notamment réinstaller les UI delegates, recalculer le layout, repeindre les composants, etc.

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Gfx
    N'appelle pas updateUI(), appelle revalidate(). Cette dernière force à recalculer le layout tandis qu'updateUI() fait bien plus, notamment réinstaller les UI delegates, recalculer le layout, repeindre les composants, etc.
    Et quelle est la différence entre validate() et revalidate() (et invalidate())?

  10. #10
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    validate() recalcule le layout de tous les composants qui ont été invalidated par invalidate(). revalidate() est une version mieux conçue de validate().

Discussions similaires

  1. Problème d'affichage lors du changement de panel
    Par momop72 dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 11/12/2013, 10h43
  2. problème d'affichage dans Panel
    Par sky88 dans le forum Débuter
    Réponses: 1
    Dernier message: 26/08/2008, 01h31
  3. Problème d'Affichage dans un Panel
    Par A&Nexus dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/04/2008, 10h24
  4. Réponses: 2
    Dernier message: 14/01/2008, 17h32
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 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