[Java] Changer de JPanel dans une JFrame

J-Bay -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je suis en train d'essayer de maitriser les JFrames et les JPanels et je me trouve face à un petit problème.

Le programme est simple : une JFrame, deux JPanels avec un JButton chacun. Lorsqu'on clique sur un JButton, on change le JPanel dans la JFrame.

Mon problème est le suivant : lorsque je clique sur mon bouton la JFrame semble se "bloquer" mais en la redimensionnant le JPanel change. Une fois ce redimensionnement fait le programme fonctionne correctement.

Voici mon code (je ne mets pas ma classe main car il s'agit juste d'un new FenetreVariante1();):

//code de la JFrame :

package variante1;  
import java.awt.Dimension;  

import javax.swing.JFrame;  
import javax.swing.JPanel;  


public class FenetreVariante1 extends JFrame{  
 JPanel p = new Panneau1(this);  
 JPanel p2 = new Panneau2(this);  
   
 public FenetreVariante1 (){  
  this.setMinimumSize(new Dimension (200,200));  
  this.setLocationRelativeTo(null);  
  this.setTitle("Titre1");  
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);  
  this.setContentPane(p2);  
  this.setVisible(true);  
    
 }  
   
 public void change (int i){  
  switch (i){  
  case 1:  
   this.setContentPane(p);  
   System.out.println("done1");  
  break;  
  case 2:  
   System.out.println("appel2");   
   this.setContentPane(p2);  
   System.out.println("done2");   
  break;  
  default:  
   System.out.println("erreur...");  
  break;    
 }  
}  
} 



//celui de l'un des deux panneaux (ils sont quasiment pareils)

package variante1;  
import java.awt.Color;  
import java.awt.Graphics;  
import java.awt.event.ActionEvent;  
import java.awt.event.ActionListener;  

import javax.swing.JButton;  
import javax.swing.JPanel;  


public class Panneau1 extends JPanel {  
 FenetreVariante1 fen;  
   
 JButton j = new JButton("Panneau2");  

 public Panneau1(FenetreVariante1 fen) {  
  super();  
  this.fen = fen;  
  j.addActionListener(new ButtonListener());  
  this.add(j);  
 }  
   
 public void paintComponent (Graphics g){  
  System.out.println("peinture1");  
  super.paintComponent(g);  
  g.setColor(Color.RED);  
  g.fillRect(0, 0, getWidth(), getHeight());  
 }  
   
   
 public class ButtonListener implements ActionListener{  

  //Cette méthode-ci fait appel à la méthode change de la fenetre pour  
  //changer le JPanel  
  @Override  
  public void actionPerformed(ActionEvent e) {  
   String s = ((JButton) e.getSource()).getText();  
   if (s.equals("Panneau2")){  
    fen.change(2);  
   }  
  }  
    
 }  
}


Je vous remercie par avance,
J-bay
A voir également:

1 réponse

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Est-ce que tu pourrais mettre le code de ton Panneau2, parce que j'ai fait un copier-coller de Panneau1, et quand je teste j'ai juste un seul bouton qui s'affiche. J'aimerais être sûr que les bugs que j'aurais en testant chez moi, seront les même que ceux que tu as toi !
0