Changer le JPanel (Accès)

Résolu
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020 - 21 mars 2012 à 18:27
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 22 mars 2012 à 15:00
Bonjour, je débute en java et je souhaiterais utilisé JPanel pour mes différentes pages ou plutôt interfaces...

Voici la structure de mon projet :

- La Class Main qui comporte la méthode main(). Cette Class instancie une fenêtre de ma Class Fenetre, un Jpanel de ma Class Panneau1. Elle ajoute le JPanel de panneau1 dans la JFrame.

- La Class Fenetre extends JFrame

- La Class Panneau1 JPanel implements ActionListener : contient un bouton "changer de panneau"

- La Class Panneau2 JPanel implements ActionListener : contient un bouton "changer de panneau"

Je souhaiterais donc pourvoir changer de panel via les boutons contenu dans ces même Class...

Mais je ne vois pas comment... Si quelqu'un pouvais me guider, j’appréciais

Merci d'avance

9 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 13:34
Voilà, ca, ca marche :

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.JPanel;


public class Fenetre extends JFrame {

private final JPanel panneau1 = new JPanel();
private final JPanel panneau2 = new JPanel();
private JPanel panelCourant;


public Fenetre(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
panneau1.setBackground(Color.BLUE);
panneau2.setBackground(Color.PINK);
panelCourant = panneau1;
setLayout(new BorderLayout());
JButton bouton = new JButton("Changer");
bouton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(panelCourant == panneau1){
panelCourant=panneau2;
getContentPane().remove(panneau1);
}
else {
panelCourant=panneau1;
getContentPane().remove(panneau2);
}
add(panelCourant, BorderLayout.CENTER);
validate();
repaint();
}
});
add(panelCourant, BorderLayout.CENTER);
add(bouton, BorderLayout.SOUTH);
setSize(300, 300);
setLocationRelativeTo(null);
setVisible(true);
}

public static void main(String[] args){
new Fenetre();
}


}
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 13:37
dans ce code, la bascule se fait lors du clic sur le JPanel :

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

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


public class Fenetre extends JFrame implements MouseListener {

private static final long serialVersionUID = 6639771122467592608L;
private final JPanel panneau1 = new JPanel();
private final JPanel panneau2 = new JPanel();
private JPanel panelCourant;


public Fenetre(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
panneau1.setBackground(Color.BLUE);
panneau1.addMouseListener(this);
panneau2.setBackground(Color.PINK);
panneau2.addMouseListener(this);
panelCourant = panneau1;
setLayout(new BorderLayout());
add(panelCourant, BorderLayout.CENTER);
setSize(300, 300);
setLocationRelativeTo(null);
setVisible(true);
}

public static void main(String[] args){
new Fenetre();
}

public void mouseClicked(MouseEvent arg0) {}
public void mouseEntered(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {}
public void mouseReleased(MouseEvent arg0) {
if(panelCourant == panneau1){
panelCourant=panneau2;
getContentPane().remove(panneau1);
}
else {
panelCourant=panneau1;
getContentPane().remove(panneau2);
}
add(panelCourant, BorderLayout.CENTER);
validate();
repaint();
}


}
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 08:17
Bonjour,

Sur ta JFrame, tu poses un Layout comme BorderLayout par exemple, tu créé ton bouton et tu fais un

add(bouton, BorderLayout.SOUTH);

Tu mets un attribut panelCourant dans ta frame et tu fais un :

add(panelCourant, BorderLayout.CENTER);

tu mets les deux panels : panneau1 et panneau2 en attribut de ta fenêtre et ton actionListener sur le bouton fait la bascule.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 08:22
Allez, je te le donne :

public class Fenetre extends JFrame {

private final JPanel panneau1 = new JPanel();
private final JPanel panneau2 = new JPanel();
private JPanel panelCourant;


public Fenetre(){
panneau1.setBackground(Color.BLUE);
panneau2.setBackground(Color.PINK);
panelCourant = panneau1;
setLayout(new BOrderLayout());
JButton bouton = new JButton("Changer");
bouton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
if(panelCourant == panneau1){
panelCourant=panneau2;
}
else {
panelCourant=panneau1;
}
validate();
repaint();
}
});
add(panelCourant, BorderLayout.CENTER);
add(bouton, BorderLayout.SOUTH);

}

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 08:22
NB : je n'ai pas testé ce code, mais l'idée est là.
0
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
22 mars 2012 à 10:51
Merci de ton aide !! Alors ton code fonctionne ou presque. J'ai mis un System.out.println sur les actions des boutons et je vois bien que je passe du panneau1 au panneau2 et vice versa. Mais par contre le background ne change pas...

Sinon j'avais déjà vu cette méthode pour gérer les jpanel, mais j'aurais voulu savoir s'il est possible les gérer via les boutons qui sont dessus... Donc addActionListener directement dans la class jpanel...

Maintenant je ne sais pas si c'est possible..
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 11:25
Sur un JPanel, tu n'as pas d'actionListener, par contre, tu peux utiliser un mouseListener et effectuer l'action sur MouseReleased.

Attend, quand j'aurai 5 minutes, je testerai le code et je te le corrigerai pour te donner une solution qui marche
0
deli2025 Messages postés 40 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 4 mai 2020
22 mars 2012 à 14:16
Merci beaucoup !! Je vais analyser tout sa :)

Je te souhaite une bonne fin de semaine ensoleiller :)

A+
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
22 mars 2012 à 15:00
De rien

a+
0
Rejoignez-nous