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

Agents de placement/Fenêtres Java Discussion :

[JFrame] Problème affichage


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut [JFrame] Problème affichage
    Bonjour à tous!
    J'ai un petit souci avec une JFrame. Celle-ci contient un Jpanel, qui contient lui, un JButton.
    Je voudrais lorque que l'on clique sur ce JButton afficher dans ma JFrame un autre Jpanel à la place de celui deja affiché.
    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
     
    class maFenetre extends JFrame implements ActionListener{
     
    	JPanel panneau1 = new JPanel();
            JPanel panneau2 = new JPanel();
            JButton bouton = new JButton();
     
            public maFenetre(){ 
                    this.setSize(400,250); 
    		this.setResizable(false) ; 
    		this.setContentPane(getPanneau1());
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            }
     
            public JPanel getPanneau1(){
      		layout.setAlignment(FlowLayout.CENTER);
      		panneau1.setLayout(layout);	
      		bouton.addActionListener(this) ;
       		panneau1.add(bouton);
       		return panneau1;	
     	}
     
            public JPanel getPanneau2(){
      		...
       		return panneau2;	
     	}
     
    	public void actionPerformed(ActionEvent e) {
    		if(e.getSource() == buton){
                           ...
                           this.setContentPane(getPanneau2());
                           this.repaint();
                    }
            }
     
    	public static void main(String[] args){
    		maFenetre gui = new maFenetre();
    		gui.setVisible(true);
    	}
    }
    Le programme se compile sans problème mais lorsque je clique sur le bouton l'affichage ne change pas! Je ne sais pas si mon code est correct...
    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    	public void actionPerformed(ActionEvent e) {
    	//faute de frappe j'espere!-------v
                           if(e.getSource() == buton){
                           ...
                           this.setContentPane(getPanneau2());
                           this.repaint();
                //moi j'utiliserais :
                           getContentPane().add(getPanneau2());
                           setVisible(true);
     
                    }
    sinon je ne vois pas mais utilise la fonction debug de ton editeur c'est utile!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Merci à toi iutcien!!!
    Ca marche deja mieux! Par contre le panneau1 reste affiché. Est-ce qu'il existe une fonction pour l'enlever? Car il faut qu'il y est juste le panneau2 dans ma frame.

  4. #4
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContentPane().remove(panneau1);

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    J'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContentPane().remove(panneau1);
    mais ça ne change rien. Je ne vois vraiment pas ce qui cloche!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 80
    Par défaut
    bon allez pour t'aider:
    Le piege c'est que tu dois rappelé getPanneau1 qui te créé un nouveau panneau au lieu de te renvoyé celui deja créé! c'est la seul erreur possible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                  private panneau1;
                  //plus loin dans le constructeur:
                  panneau1=getPanneau1();
                 //et enfin
    	public void actionPerformed(ActionEvent e) {
     
                           if(e.getSource() == button){
                           getContentPane().remove(panneau1); 
                           getContentPane().add(getPanneau2());
                           setVisible(true);
     
                    }
    voila!

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Euh!!? Je ne comprends pas trop ta démarche iutcien...
    Je ne vois pas pourquoi on a besoin de recréer un panneau1 pour justement l'enlever. Et si j'ajoute :
    il me renvoi une erreur, ce qui me parrais normal vu que je l'ai deja déclaré, nan?

  8. #8
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Ce qu'il voulait dire c'est de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContentPane().remove(panneau1);
    et non pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getContentPane().remove(getPanneau1());
    car lorsque tu appelles la méthode getPanneau1() tu recrées un nouveau panel, or toi tu veux enlever l'existant.

    Vérifies que tu fais bien 1 seul appel à la méthode getPanneau1().
    Sinon j'ai du mal à voir ce qui pourrait clocher...

  9. #9
    Membre chevronné Avatar de xixi31
    Inscrit en
    Juin 2005
    Messages
    423
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Juin 2005
    Messages : 423
    Par défaut
    avec un peu de couleurs ...

    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
    class maFenetre extends JFrame implements ActionListener{
     
        JPanel panneau1 = null;
            JPanel panneau2 = null;
            JButton bouton = new JButton();
     
            public maFenetre(){ 
                    this.setSize(400,250); 
            this.setResizable(false) ; 
            this.setContentPane(getPanneau1());
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            }
     
            public JPanel getPanneau1(){
                if ( panneau1 == null )
                {   panneau1 = new JPanel();
                    panneau1.setBackground(Color.RED);
              FlowLayout layout = new FlowLayout(FlowLayout.CENTER);
              panneau1.setLayout(layout);    
              bouton.addActionListener(this) ;
               panneau1.add(bouton);
                }
                return panneau1;    
         }
     
            public JPanel getPanneau2(){
                if ( this.panneau2 == null )
                {   this.panneau2 = new JPanel();
                    panneau2.setBackground(Color.BLUE);
              panneau2.add(new JLabel("panneau2"));
                }
                return panneau2;    
         }
     
            public void actionPerformed(ActionEvent e) {
        //faute de frappe j'espere!-------v
                           if(e.getSource() == bouton){
                               setContentPane(getPanneau2());
                               validate();
     
                    }
            }
     
        public static void main(String[] args){
            maFenetre gui = new maFenetre();
            gui.setVisible(true);
        }
    }

  10. #10
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    Dans chaque instance JFrame j'utilise (JFrame).pack() avant d'afficher la fenetre.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 109
    Par défaut
    Merci pour toutes ces réponses!!!!
    J'ai testé les différentes solutions et c'est avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     setContentPane(getPanneau());
              validate();
    que ça marche le mieux.
    Il y a même pas besoins de faire un remove du panneau1 avec cette solution, ça l'enlève directe!
    Je comprends toujours pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     getContentPane().remove(panneau1);
    ne marche pas mais bon tant pis...!
    Merci encore.

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

Discussions similaires

  1. Problème affichage JPanel dans JFrame
    Par Papipen dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/06/2009, 20h45
  2. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  3. Problème affichage primitive
    Par goutbouyo dans le forum DirectX
    Réponses: 4
    Dernier message: 29/12/2004, 18h25
  4. [Plugin][VE] Problème affichage
    Par sebb84 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 05/07/2004, 14h50
  5. [DOS] Problème affichage de DOS dans un Memo
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 25/06/2004, 13h31

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