Pb d'ecouteur (addactionlistener)

Résolu
Signaler
Messages postés
24
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
28 mars 2006
-
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
-
s'il vous plait, je me trouve devant un problème assez chiant ^^

j'ai besoin d'implement plussieur ecouteur pour un meme class (ecouteur
de bouton, d'onglets , ...), j'ai donc decider de mettre mon ecouteur
addactionlistener dans un autre class, mais maintenant il ne marche
plus :(



voila mon prog :



Fenetre {

GridBagConstraints BSTOP = new GridBagConstraints();

BSTOP.gridx = 4;

BSTOP.gridy = 19;

BSTOP.gridwidth = 1;

BSTOP.gridheight = 1;

BSTOP.ipady = 20;

BSTOP.ipadx = 10;



//ajout du stop

Stop = new JButton("STOP");

Stop.addActionListener(MonEcouteur);

grid.setConstraints(Stop, BSTOP);

fen.add(Stop);

}



et dans une autre class :

public class Ecouteur implements ActionListener

{

public Ecouteur()

{



}



public void actionPerformed(ActionEvent event)

{

if (event.getSource().equals(Stop))

{

System.out.println("Stop");

}



ou est l'erreur svp ?

7 réponses

Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
le truc c est que avant dans ta classe fenetre t avais une vue sur STOP, la t es dans une autre classe et c est donc impossible d avoir un access a STOP a moins de le passer dans le constructeuur de ton Ecouteur
(d ailleurs suivant ton code j comprend mm pas que ca compile)
de tte facon j suis pas sur que ce soit tres bien ce que tu fais puisque tu va faire exploser le nb de tes classes, un listener par composant c bcp
t as qu a faire une méthode qui ajoute tous les listener :


public void addEvents(){
button1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//tu fé ton stop
}
});
panel1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//tu fé ce que tu veux
}
});

... et ainsi de suite

}
Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
13 avril 2020

Il y a quatresolutions pour implemnter un listener :





1)la classe implemente le listener





monbouton.addActioListener(this)//fait référence à la classe





public void actionPerformed(ActionEvent event){


}





2)une classe interne





class monecouteur implements Actionlistener{


public void actionPerformed(ActionEvent event){


}


}





monecouteur unecouteur=new monecouteur();


monbouton.addActioListener(unecouteur);





3)une classe externe avec le défaut que les variables de la classe d’origine ne sont pas visibles de la classe externe.





4)une classe anonyme





monbouton.addActioListener(new ActionListener(){


public void actionPerformed(ActionEvent event){


}


});/auteurdetail.aspx?ID=683595


dans le cas de classe anonyme tu peus en avoir autant que tu veux car elles sont connues seulement des objets swing auquels que tu as ajouté.
Messages postés
24
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
28 mars 2006

je ne vois pasbien ce que tu veux dire ?

je doit mettre ton prog dans ma class principale fenetre ?
ou dans une autre class ecouteur ?

si c'est dans une autre class ecouteur , je me quoi dans ma class fenetre ?

merci d'avance pour ton aide ;)
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
non t as plus de classe ecouteur maintenant ta la fenetre principale dans le constructeur tu fais appel a la fonction addEvents() qui va ajouter tous les listener a chaque composant de ta fentre,
- ainsi t aura acces a chaque composant vu que ta fenetre les aura en variable
- ca t évitera d avoir à coder 20 listener si tu veux ajouter 20 action sur 20 composants dans ta fentre
et donc t oublie ta classe Ecouteur
++ Toinou
Messages postés
24
Date d'inscription
jeudi 2 février 2006
Statut
Membre
Dernière intervention
28 mars 2006

cela ne va t il pas me gener si j'implements ma class principale en actionlistener si je veux utiliser d'autre ecouteur apres ? par exemple des MouseListener ou des ecouteurs de comboxbox (que je sais pas encore faire mais bon ^^)
Messages postés
358
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
13 avril 2020

dans le cas de bouton avec un texte tu peus utiliser getcommand.


exemple

public void actionPerformed(ActionEvent event)
{
if (event.getCommand().equals("STOP"))
{
System.out.println("Stop");
}

cela reste assez simple pour des boutons.

par contre pour d'autre type d'evenement il faut caster l'evenement en objet swing. çà marche si tu as un seul evenement de ce type.
Messages postés
764
Date d'inscription
mardi 25 mai 2004
Statut
Membre
Dernière intervention
8 mars 2011
8
j t ai jamais dis que ta classe principale devait implémenter ActionListener !! l'implémentation du listener est fait quand tu écris
panel1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//tu fé ce que tu veux
}
});

car tu crée une classe qui implémente actionlistener en faisant le
new ActionListener(){
public void actionPerformed(ActionEvent e) {
//tu fé ce que tu veux
}
}

si jamais tu veux mettre un mouse listener si ta fenetre par exemple t as qu a faire dans la fonciton addEvents()
this.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e) {
//blabla
}

public void mouseEntered(MouseEvent e){
//blabla
}

public void mouseExited(MouseEvent e) {
//blabla
}

public void mousePressed(MouseEvent e) {
//blabla
}

void mouseReleased(MouseEvent e)



}