Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1682 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Afficher JPanel après RemoveAll de la JFrame

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Afficher JPanel après RemoveAll de la JFrame

n°1926950
jannyboop
Posté le 26-09-2009 à 16:39:00  profilanswer
 

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 :
  1. package language;
  2. import java.awt.Container;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. public class toto extends JFrame implements ActionListener
  9. {
  10.     JButton voc, verbe;   
  11.     Container c;
  12.     Rectangle rec;   
  13.     JPanel j1,j2;
  14.     JButton b1,b2;
  15.     int num1=2;
  16.     public toto()
  17.     {
  18.         b1 = new JButton("ok" );
  19.         b2 = new JButton("souk" );
  20.         j1 = new JPanel();       
  21.         j2 = new JPanel();
  22.         Jbinit();
  23.     }
  24.     public void Jbinit()
  25.     {
  26.         j1.add(b1);
  27.         j2.add(b2);
  28.         c = getContentPane();       
  29.         setLayout(null);
  30.         verbe = new JButton("bouton1" );
  31.         verbe.setBounds(150, 0, 150, 30);
  32.         verbe.addActionListener(this);
  33.         voc = new JButton("bouton2" );
  34.         voc.setBounds(300, 0, 150, 30);
  35.         voc.addActionListener(this);
  36.         c.add(voc);       
  37.         c.add(verbe);
  38.         System.out.println("num:" + num1);
  39.         if (num1 == 2)
  40.         {
  41.             j1.setBounds(0, 85, 600, 40);
  42.             c.add(j1);
  43.         }
  44.         if (num1 == 3)
  45.         {
  46.             j1.setBounds(0, 60, 600, 480);
  47.             c.add(j2);
  48.         }
  49.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  50.     }
  51.     public void actionPerformed(ActionEvent e) {
  52.         Object source = e.getSource();
  53.         if (source == voc)
  54.         {
  55.             num1 = 3;
  56.             c.removeAll();
  57.             this.Jbinit();
  58.             this.repaint();
  59.         }
  60.     } 
  61.     public static void main(String[] args) {
  62.         JFrame page = new toto();
  63.         page.setBounds(400, 60, 600, 650);
  64.         page.setResizable(false);
  65.         page.setVisible(true);
  66.     }
  67. }


 
Merci d'avance pour votre aide!!

mood
Publicité
Posté le 26-09-2009 à 16:39:00  profilanswer
 

n°1926977
jannyboop
Posté le 26-09-2009 à 19:59:18  profilanswer
 

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 :
  1. package language;
  2. import java.awt.Container;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import javax.swing.JButton;
  6. import javax.swing.JFrame;
  7. import javax.swing.JPanel;
  8. public class toto extends JFrame implements ActionListener
  9. {
  10.     JButton voc, verbe;   
  11.     Container c;
  12.     Rectangle rec;   
  13.     JPanel j1,j2;
  14.     JButton b1,b2;
  15.     int num1=2;
  16.     public toto()
  17.     {
  18.         c = getContentPane();       
  19.         setLayout(null);
  20.         b1 = new JButton("ok" );
  21.         b2 = new JButton("souk" );
  22.         j1 = new JPanel();     
  23.         j1.setBounds(0, 85, 600, 40);         
  24.         j2 = new JPanel();
  25.         j2.setBounds(0, 60, 600, 480);
  26.         verbe = new JButton("bouton1" );
  27.         verbe.setBounds(150, 0, 150, 30);
  28.         verbe.addActionListener(this);
  29.         voc = new JButton("bouton2" );
  30.         voc.setBounds(300, 0, 150, 30);
  31.         voc.addActionListener(this);
  32.         j1.add(b1);
  33.         j2.add(b2);
  34.         c.add(voc);       
  35.         c.add(verbe);
  36.         Jbinit();
  37.     }
  38.     public void Jbinit()
  39.     {
  40.         j1.hide();
  41.         j2.hide();
  42.        
  43.         if (num1 == 2)
  44.         {           
  45.             j1.show();
  46.         }
  47.         if (num1 == 3)
  48.         {
  49.            
  50.             j2.show();
  51.         }
  52.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  53.     }
  54.     public void actionPerformed(ActionEvent e) {
  55.         Object source = e.getSource();
  56.         if (source == voc)
  57.         {
  58.             num1 = 3;           
  59.             this.Jbinit();
  60.             this.repaint();
  61.         }
  62.     } 
  63.     public static void main(String[] args) {
  64.         JFrame page = new toto();
  65.         page.setBounds(400, 60, 600, 650);
  66.         page.setResizable(false);
  67.         page.setVisible(true);
  68.     }
  69. }


 
Si quelqu'un a malgré tout une idée sur la manière de procéder...
:D

n°1927170
cbeyls
Hail to the King, Baby
Posté le 28-09-2009 à 01:07:58  profilanswer
 

Salut,
 
Quand tu modifies les composants d'une fenêtre en cours d'affichage, tu dois appeler la méthode validate() sur le conteneur pour qu'il redessine correctement tous les composants. C'est même marqué noir sur blanc dans la documentation de add().
 
Après nettoyage de ton code, j'obtiens ceci:
 

Code :
  1. package fr.language;
  2.  
  3. import java.awt.Container;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JPanel;
  9.  
  10. public class Toto extends JFrame implements ActionListener {
  11.  
  12.     private static final long serialVersionUID = 1L;
  13.     
  14.     private JButton voc, verbe;
  15.     private JPanel j1, j2;
  16.     private JButton b1, b2;
  17.     private int num1 = 2;
  18.  
  19.     public Toto() {
  20.         setBounds(400, 60, 600, 650);
  21.         setResizable(false);
  22.         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  23.         setLayout(null);    // A éviter!
  24.         
  25.         verbe = new JButton("bouton1" );
  26.         verbe.setBounds(150, 0, 150, 30);
  27.         verbe.addActionListener(this);
  28.         
  29.         voc = new JButton("bouton2" );
  30.         voc.setBounds(300, 0, 150, 30);
  31.         voc.addActionListener(this);
  32.         
  33.         j1 = new JPanel();
  34.         j1.setBounds(0, 85, 600, 40);
  35.         b1 = new JButton("ok" );
  36.         j1.add(b1);
  37.         
  38.         j2 = new JPanel();
  39.         j2.setBounds(0, 60, 600, 480);
  40.         b2 = new JButton("souk" );
  41.         j2.add(b2);
  42.         
  43.         jbInit();
  44.     }
  45.     
  46.     public void jbInit() {
  47.         System.out.println("num:" + num1);
  48.         
  49.         Container content = getContentPane();
  50.         content.removeAll();
  51.         content.add(voc);
  52.         content.add(verbe);
  53.         switch (num1) {
  54.         case 2:
  55.             content.add(j1);
  56.             break;
  57.         case 3:
  58.             content.add(j2);
  59.         }
  60.     }
  61.     
  62.     public void actionPerformed (ActionEvent e) {
  63.         if (e.getSource() == voc) {
  64.             num1 = 3;
  65.             jbInit();
  66.             // Réarrange les composants actuellement affichés
  67.             getContentPane().validate();
  68.             repaint();
  69.         }
  70.     }
  71.     
  72.     public static void main(String[] args) {
  73.         new Toto().setVisible(true);
  74.     }
  75. }


 
Note également qu'il est fortement déconseillé de ne pas utiliser de LayoutManager (le mettre à null comme tu fais). Ici tu devrais utiliser un BoxLayout vertical par exemple, ou encore un BorderLayout, et mettre les 2 boutons du haut dans un autre JPanel afin qu'ils s'affichent toujours côte à côte.

n°1927439
jannyboop
Posté le 28-09-2009 à 21:37:22  profilanswer
 

Je te remercie pour ta réponse! Je vais tester tout ça! Je voulais tester aussi le mode design proposé par netbeans. Par contre, pour tester, y-a-il un moyen de copier-coller ton code sans avoir les numéros de lignes. J'ai essayé avec la sélection intelligent de firefox mais je ne sais pour quelles raisons, il est grisé!!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Afficher JPanel après RemoveAll de la JFrame

 

Sujets relatifs
Afficher caché des div qui vont par paireAfficher/cacher un texte toggle mootools
afficher dates et noms de lieuxafficher (avec JavaScript) les caractères correspondants aux codes
afficher infos autre pageAfficher lisiblement un code VBA sur un doc word
[FIXED]Pop up en javascript pour afficher un player Mp3.[Java] interférences entre OpenDialog et impression de jFrame (résolu)
Afficher une div centrée en hauteur sur une page scrolléeAfficher texte au survol javascript
Plus de sujets relatifs à : Afficher JPanel après RemoveAll de la JFrame


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR