Changer le JPanel (Accès) [Résolu]

Messages postés
37
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
27 mai 2013
- - Dernière réponse : cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 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
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
3
Merci
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();
}


}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 194 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
3
Merci
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();
}


}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 194 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
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.
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
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);

}

}
Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
NB : je n'ai pas testé ce code, mais l'idée est là.
Commenter la réponse de cs_Julien39
Messages postés
37
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
27 mai 2013
0
Merci
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..
Commenter la réponse de deli2025
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
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
Commenter la réponse de cs_Julien39
Messages postés
37
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
27 mai 2013
0
Merci
Merci beaucoup !! Je vais analyser tout sa :)

Je te souhaite une bonne fin de semaine ensoleiller :)

A+
Commenter la réponse de deli2025
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
De rien

a+
Commenter la réponse de cs_Julien39