langagec08
Messages postés72Date d'inscriptionmardi 30 mars 2010StatutMembreDernière intervention22 août 2011
-
31 mars 2011 à 13:21
langagec08
Messages postés72Date d'inscriptionmardi 30 mars 2010StatutMembreDernière intervention22 août 2011
-
31 mars 2011 à 16:16
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
}
}
}
cs_jojolemariole
Messages postés519Date d'inscriptionmercredi 21 mars 2007StatutMembreDernière intervention19 décembre 201625 31 mars 2011 à 14:05
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).