Interagir avec des boutons d'une autre classe

Résolu/Fermé
Qoodsy - Modifié par Qoodsy le 14/03/2016 à 14:54
 Utilisateur anonyme - 16 mars 2016 à 17:55
Bonjour à tous, c'est toujours moi ! :)

Cette fois, je possède une classe main en JFrame qui affiche d'autres classes qui sont des JPanel grâce à un setContentPane().
Mon objectif est de communiquer entre ces classes JPanel afin de changer l'écran qui s'affichera dans la classe main.
Mon problème est le suivant : comment interagir avec les boutons de ces classes ?

Voici mon code, si ça peut aider.
public class Main extends JFrame {

private EcranDepart dep = new EcranDepart();
private EcranInscription inscr = new EcranInscription();
private EcranConnexion con = new EcranConnexion();

public static void main(String[] args) {
Main launch = new Main();
}

public Main() {
this.setTitle("Ma fenetre");
this.setSize(800, 600);
this.setContentPane(dep);
this.setVisible(true);
}
}


Si je clique sur le bouton "connect", ma classe main change son setContentPane pour afficher la classe EcranConnection.
Si je clique sur le bouton "sub", ma classe main change son setContentPane pour afficher la classe EcranInscription.
Si je clique sur le bouton "info", ma classe main change son setContentPane pour afficher une autre classe.
public class EcranDepart extends JPanel {

private JPanel pantop;
private JPanel panmid;
private JPanel panmid_topinv;
private JPanel panbot;

private JButton connect;
private JButton sub;
private JButton info;

public EcranDepart() {

this.setLayout(new BorderLayout());

pantop = new JPanel();
pantop.setPreferredSize(new Dimension(800, 0));
this.add(pantop, BorderLayout.NORTH);

panmid = new JPanel();
panmid.setBackground(Color.red);
this.add(panmid, BorderLayout.CENTER);

panmid_topinv = new JPanel();
panmid_topinv.setPreferredSize(new Dimension(400, 150));
panmid_topinv.setBackground(Color.red);
panmid.add(panmid_topinv);

connect = new JButton("Se connecter");
connect.setPreferredSize(new Dimension(400, 100));
sub = new JButton("S'incrire");
sub.setPreferredSize(new Dimension(400, 100));
panmid.add(connect);
panmid.add(sub);

panbot = new JPanel();
panbot.setBackground(Color.white);
panbot.setPreferredSize(new Dimension(800, 50));
panbot.setLayout(new BorderLayout());
this.add(panbot, BorderLayout.SOUTH);

info = new JButton("i");
info.setPreferredSize(new Dimension(50,50));
panbot.add(info, BorderLayout.EAST);
}
}

1 réponse

Salut,

Aucun événement n'est associé à tes boutons.
extends ActionListener à EcranDepart.
addActionListener(this) pour chacun de tes boutons.
Tu dois implémenter la méthode actionPerformed(ActionEvent e).
Tu peux récupérer l'origine du déclencheur de l'événement avec e.getSource() (attention, c'est un JComponent).
Tu peux aussi associer un nom à chacun de tes boutons (.setName(String name)) et les détecter en faisaint e.getName() (je sais pas si ça marche pour tous les JComponent).

Aider est mon nindo
1
Merci Jason pour ton aide encore, j'ai pas mis le code des évènements pour pas fausser les recherches mais j'ai bien codé actionPerformed et addActionListener(this). Je parviens à modifier tout ce que je veux (nom, text, couleur etc...) sur ce panneau mais ce n'est pas ce que je cherche à faire.

Je cherche à ce que quand je clique sur le bouton "connect" du JPanel EcranDepart.java, le setContentPane() de la JFrame Main.java change et affiche le JPanel EcranConnect.java

Je ne sais pas si c'est assez clair ^^
0
Utilisateur anonyme
15 mars 2016 à 18:24
et si dans l'événement tu fais setContentPane(con) ?
0
Qoodsy > Utilisateur anonyme
15 mars 2016 à 18:37
Il faudrait donc que je mette chaque classe JPanel en private dans toutes les autres ? Ca m'a pas l'air très optimal :/
0
Utilisateur anonyme
15 mars 2016 à 19:30
J'ai pas compris ...
0
Dans EcranDepart.java, il faudrait que je mette en attribut private les instances des classes EcranConnexion.java et de EcranInscription.java
0