AddActionListener qui ne marche pas [Résolu]

Signaler
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
-
langagec08
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011
-
Bonjour tout le monde voila mon problème : j'ai déclarer un classe button extends Jbutton et je veux utiliser cette classe dans une autre classe A,mais lorsque je met le AddActionListener pour que mon bouton écoute un formulaire ça ne fonctionne pas, voila mon code bien comprendre le probléme :
// voila ma classe Button
public class Button extends JButton {

JButton bouton=new JButton() ;
public Button(){	
super() ;
}
public Button(String lab){
bouton.setText(lab);
}

public JPanel definirbouton(){
JPanel pan=new JPanel();
bouton.setPreferredSize(new Dimension(100,30));
pan.add(bouton);
return pan;
}

}

La CLasse A ou j'appelle mon Jbutton
public class Aj {
 /*il ya plusieurs autre déclaration de formulaire ...mais je veux pas vous surchager par le code*/
Button valider=new Button("valider") ; 

JPanel formulaire=new JPanel();
public Aj(){
 // jai déja une classe Fenetre ou je defini ma fenetre
     Fenetre fenetre=new Fenetre();
     formulaire.add(valider.definirbouton());
valider.addActionListener(new BoutonListener());
fenetre.setContentPane(formulaire);

       }

class BoutonListener implements ActionListener{
public void actionPerformed(ActionEvent e){

System.out.println("okkkk");
 // mais pourtant rien ne s'affiche sur la console
}


}
}

aidez moi SVP

2 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
21
Salut,

Normal que ça ne marche pas. Histoire que tu comprennes pourquoi :

- ta classe Button hérite de JButton => une instance de Button est donc également une instance de JButton. C'est comme si je disais : une voiture est un véhicule.

- à chaque appel de new Jbutton() tu crées une nouvelle instance de JButton, c'est-à-dire, un nouveau bouton. De plus, à chaque appel de new Button() tu crées également un nouveau bouton puisqu'un Button est un JButton.

Dans ton code, tu penses instancier 1 bouton "valider" mais en fait, tu en instancies 2. Le bouton "valider" a bien reçu l'écouteur, mais comme il n'est pas affiché, il ne risque pas de se déclencher.

Avec cette version de ta classe Button, ça marchera sûrement mieux :

public class Button extends JButton {

public Button(String lab){

super(lab);
setPreferredSize(new Dimension(100,30));

}

public JPanel definirbouton() {

JPanel pan = new JPanel();
pan.add(this);
return pan;

}

}


Cela dit, je ne vois pas l'intérêt de la méthode definirbouton(), si tu l'appelles 2x ça risque de ne pas marcher (un bouton présent dans 2 containers risque de ne pas se rafraîchir correctement).

Bonne continuation,
Jonathan Guéhenneux
Messages postés
72
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
22 août 2011

Merciiii Jonathan Guénneux tu m'as vraiment sauvé la vie...ça marche trés bien maitenant