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 :

Ajouter un Jpanel dans un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut Ajouter un Jpanel dans un JPanel
    Bonjour

    J'ai une JFrame qui contient 4 Panels positionnés grâce à un BorderLayout: CENTER, WEST, NORTH, SOUTH. Le Panel WEST contient un bouton Ajout qui est censé vider le Panel CENTER et ajouter un nouveau Panel que j'ai nommé nouveauPanel.

    Le problème est quand je clique sur le bouton Ajout, rien ne se passe,c'est-à-dire que le Panel CENTER ne m'affiche pas le nouveauPanel.

    Voici mon code:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package gesstock;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.CardLayout;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    /**
     *
     * @author Mo
     */
    public class Accueil extends JFrame{
     
         JPanel panCentre = new JPanel();
         JPanel panHaut = new JPanel();
         JPanel panGauche = new JPanel();
         JPanel panBas = new JPanel();
         JPanel panNouveauPanel = new JPanel();
     
        public Accueil() {
        this.setSize(700, 500);
        this.setTitle("Gestion Entreprise");
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ajoutComposant();
        this.setVisible(true);
        }
     
        public void ajoutComposant(){
        this.setLayout(new BorderLayout());
     
     
        panHaut.setBackground(Color.red);
        panHaut.setPreferredSize(new Dimension(0, 60));
     
        panCentre.setBackground(Color.yellow);
        panCentre.setLayout(new BorderLayout());
     
        panGauche.setPreferredSize(new Dimension(120, 0));
     
        panBas.setBackground(Color.white);
        panBas.setPreferredSize(new Dimension(0, 40));
     
        JButton ajout = new JButton("Ajouter nouveau panel");
     
        panGauche.add(ajout);
     
     
        panNouveauPanel .setBackground(Color.blue);
     
     
        ajout.addActionListener(new ActionListener(){
     
            @Override
            public void actionPerformed(ActionEvent e) {
                panCentre.add(panNouveauPanel);
     
            }
     
        });
        //On ajoute les 4 panels au content pane de la JFrame
    //Au centre
    this.getContentPane().add(panCentre,BorderLayout.CENTER);
    //en haut
    this.getContentPane().add(panHaut,BorderLayout.NORTH);
    //à gauche
    this.getContentPane().add(panGauche,BorderLayout.WEST);
    //en bas
    this.getContentPane().add(panBas,BorderLayout.SOUTH);
        }
     
    }
    Merci

  2. #2
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ca marche. En fait il fallait que j'ajoute :

    Merci

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Plutôt un revalidate(), que updateUI(), pour indiquer que le layout n'est plus valide (puisque tu as changé les composants à l'intérieur du container), et reforcer le calcul du layout.
    Attention, quand tu ajoutes des composants, sans enlever ceux qui ont été ajoutés avant, tu cumules tous ces composants. Parfois, selon le layout manager, les composants qui stagnent dans le container ne sont pas gênants (exceptés par la mémoire qu'ils occupent inutilement, et par le temps de traitement qu'ils peuvent consommer inutilement), mais parfois ça peut donner des résultats inattendus. Retire les composants obsolètes, ce sera toujours plus propre. Je parle de manière général, parce que ton code ne permettra là d'ajouter que le même panel au panel du centre, et, comme un composant ne peut avoir qu'un seul parent, l'ajouter le supprimera automatiquement de son parent actuel : c'est le seul cas où il n'est pas nécessaire explicement de retirer le composant de son container.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ok, mais quand je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ajout.addActionListener(new ActionListener(){
     
            @Override
            public void actionPerformed(ActionEvent e) {
                panCentre.removeAll();
                panCentre.add(panNouveauPanel);
                panCentre.revalidate(); 
            }
     
        });
    Ça ne marche pas. Par contre avec le updateUI() ça marche

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans ce cas, il faut ajouter un repaint() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    panCentre.removeAll();
    panCentre.add(panNouveauPanel);
    panCentre.revalidate();
    panCentre.repaint();
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre actif
    Inscrit en
    Juin 2005
    Messages
    578
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 578
    Points : 240
    Points
    240
    Par défaut
    Ok ça marche. Merci

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

Discussions similaires

  1. Problème ajout d'image dans un JPanel
    Par wazol dans le forum Débuter
    Réponses: 4
    Dernier message: 07/05/2010, 08h46
  2. Une image dans un Jpanel dans un Jpanel dans un Jframe
    Par ThomasH dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 09/12/2009, 20h23
  3. Ajouter un JComponent dans un JPanel est ce possible?
    Par jlassiramzy dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 23/04/2007, 21h02
  4. ajouter une grille dans un jpanel qui contient un fond
    Par amerix dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 21/03/2007, 20h59
  5. [Ultra debutant] ajout de composant dans un jpanel
    Par miniseb dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 13/05/2006, 19h27

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