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 :

Affichage d'un JPanel JFrame après removeall et ActionListener


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Affichage d'un JPanel JFrame après removeall et ActionListener
    Bonjour à tous,
    Voici le problème sur lequel je bute:
    1- Affichage d'une JPanel j1 (avec un bouton b1 -> sans importance) dans une Jframe;
    2- Lorsque l'utilisateur appuie sur le bouton, tout est remové du JFrame et la variabe entière num1 passe à 3. La fonction JBinit est relancée.
    3- Ensuite, une autre Jpanel j2 est censé s'afficher dans la JFrame.

    Seulement, j2 ne s'affiche pas.

    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
     
    package language;
     
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class toto extends JFrame implements ActionListener
    {
        JButton voc, verbe;    
        Container c;
        Rectangle rec;    
        JPanel j1,j2;
        JButton b1,b2;
        int num1=2;
     
        public toto()
        {
            b1 = new JButton("ok");
            b2 = new JButton("souk");
            j1 = new JPanel();        
            j2 = new JPanel();
            Jbinit();
        }
     
        public void Jbinit()
        {
            j1.add(b1);
            j2.add(b2);
     
            c = getContentPane();        
            setLayout(null);
     
            verbe = new JButton("bouton1");
            verbe.setBounds(150, 0, 150, 30);
            verbe.addActionListener(this);
     
            voc = new JButton("bouton2");
            voc.setBounds(300, 0, 150, 30);
            voc.addActionListener(this);
     
            c.add(voc);        
            c.add(verbe);
     
            System.out.println("num:" + num1);
            if (num1 == 2)
            {
                j1.setBounds(0, 85, 600, 40);
                c.add(j1);
            }
            if (num1 == 3)
            {
                j1.setBounds(0, 60, 600, 480);
                c.add(j2);
            }
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
     
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
     
            if (source == voc)
            {
                num1 = 3;
                c.removeAll();
                this.Jbinit();
                this.repaint();
            }
        }   
     
        public static void main(String[] args) {
            JFrame page = new toto();
            page.setBounds(400, 60, 600, 650);
            page.setResizable(false);
            page.setVisible(true);
        }
    }
    Merci d'avance pour votre aide.

  2. #2
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut Boffffff
    Le seul truc que j'ai trouvé (horrible!!!) mais qui marche, c'est remplir le conteneur avec tout ce dont j'ai besoin et puis, jouer sur les show/hide sur les objets que je veux faire apparaître.

    Sur le prototype de code que j'ai fait, cela ressemble à ça:

    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
    82
    83
     
    package language;
     
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class toto extends JFrame implements ActionListener
    {
        JButton voc, verbe;    
        Container c;
        Rectangle rec;    
        JPanel j1,j2;
        JButton b1,b2;
        int num1=2;
     
        public toto()
        {
            c = getContentPane();        
            setLayout(null); 
     
            b1 = new JButton("ok");
            b2 = new JButton("souk");
            j1 = new JPanel();      
            j1.setBounds(0, 85, 600, 40);          
     
            j2 = new JPanel();
            j2.setBounds(0, 60, 600, 480);
     
            verbe = new JButton("bouton1");
            verbe.setBounds(150, 0, 150, 30);
            verbe.addActionListener(this);
     
            voc = new JButton("bouton2");
            voc.setBounds(300, 0, 150, 30);
            voc.addActionListener(this);
     
            j1.add(b1);
            j2.add(b2);
            c.add(voc);        
            c.add(verbe);
     
            Jbinit();
        }
     
        public void Jbinit()
        { 
            j1.hide();
            j2.hide(); 
     
            if (num1 == 2)
            {            
                j1.show();
            }
            if (num1 == 3)
            {
     
                j2.show();
            }
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
     
        public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
     
            if (source == voc)
            {
                num1 = 3;            
                this.Jbinit();
                this.repaint();
            }
        }   
     
        public static void main(String[] args) {
            JFrame page = new toto();
            page.setBounds(400, 60, 600, 650);
            page.setResizable(false);
            page.setVisible(true);
        }
    }
    Si quelqu'un a malgré tout une idée sur la manière de procéder...

  3. #3
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Tu gagneras à utiliser uniquement les layout plutôt que de faire des setBounds.
    Il n'est pas nécessaire de supprimer tous les composants, mais seulement celui en cause, puisque ce que tu veux c'est échanger deux panel.
    Enfin, pour un changement dynamique de composant, il faut appeler la méthode revalidate() du conteneur, suivi éventuellement d'un repaint().

    Voici un exemple :

    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
    82
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class DynamicChange extends JFrame {
     
    	public static void main(String[] args) {
    		DynamicChange frame = new DynamicChange();
    		frame.pack();
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    	}
     
    	private JPanel content;
    	private JButton toggleButton;
    	private JPanel1 panel1;
    	private JPanel2 panel2;
    	private JPanel currentPanel;
     
    	public DynamicChange() {
    		super("Changement dynamique de panel");
     
    		setDefaultCloseOperation(EXIT_ON_CLOSE);
     
    		this.toggleButton = new JButton("Changer le panel");
    		this.toggleButton.addActionListener(new ActionListener() {
    			@Override
    			public void actionPerformed(ActionEvent e) {
    				toggle();
    			}
    		});
     
    		this.panel1 = new JPanel1();
    		this.panel2 = new JPanel2();
     
    		this.content = (JPanel) getContentPane();
    		this.content.setLayout(new BorderLayout());
     
    		this.content.add(this.toggleButton, BorderLayout.NORTH);
    		this.content.add(this.panel1, BorderLayout.CENTER);
     
    		this.currentPanel = this.panel1;
    	}
     
    	public void toggle() {
    		this.content.remove(this.currentPanel);
    		if (this.currentPanel == this.panel1) {
    			this.currentPanel = this.panel2;
    		} else {
    			this.currentPanel = this.panel1;
    		}
    		this.content.add(this.currentPanel, BorderLayout.CENTER);
    		this.content.revalidate();
    		this.currentPanel.repaint();
    	}
     
     
     
    	private class JPanel1 extends JPanel {
     
    		public JPanel1() {
    			setBackground(Color.CYAN);
    			add(new JLabel("panel 1"));
    		}
     
    	}
     
    	private class JPanel2 extends JPanel {
     
    		public JPanel2() {
    			setBackground(Color.GREEN);
    			add(new JLabel("panel 2"));
    		}
     
    	}
     
    }

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse. Je ne sais pas si j'aurais pu, rien qu'avec des borderlayout faire ce que j'ai fait mais par contre, je sais le temps que j'ai pris rien que pour gérer la mise en page de mon petit soft.
    Encore merci pour ton aide!!

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

Discussions similaires

  1. Problème d'affichage d'un JPanel dans un JFrame.
    Par Patrick95500 dans le forum Agents de placement/Fenêtres
    Réponses: 8
    Dernier message: 18/09/2014, 13h51
  2. Affichage de différents JPanel dans une JFrame
    Par PROJECT-AURORA dans le forum Débuter
    Réponses: 13
    Dernier message: 16/11/2013, 11h22
  3. Réponses: 5
    Dernier message: 12/06/2012, 22h02
  4. Ajout et affichage d'un JPanel dans une JFrame lorsqu'un évènement se produit
    Par bilou_12 dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 27/03/2012, 20h27
  5. [MySQL] Affichage du menu en boucle après requête effectuer
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 08/02/2006, 14h44

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