Comment créer un émetteur d'événemts

tartur Messages postés 22 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 11 février 2004 - 22 mai 2003 à 17:18
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 - 23 mai 2003 à 09:41
salut,
je veux en fait contourner le problème de mono héritage.
j'ai une classe A qui doit observer une class B. mais la classe B hérite déjà de JPanel et ne peut pas hériter de Observable
bon g pensé à faire une classe C interne à B qui implémente Observable, mais je veux que mon champ observée soit dans B.
g aussi pensé à faire de sorte que ma classe B soit un émetteur d'événements et que A soit un écouteur de B (c'est génial pour frimer non?? créer un émetteur :) ). Je c que ceci est possible avec les beans mais je ne dois pas l'utiliser: ce n'était pas dans la conception de l'application et donc je n'ai pas suivi les conventions des beans, en plus je bosse sous linux alors pour travailler avec les beans je ne c pas comment faire.
Si vous avez une réponse à la première alternative qui sois ésthétique (pas trop de passage de parametres) ou surtout à la deuxième je l'attends avec impatience :p.
Merci à tous, et je voulais dire que c'est trés chouette comme site, par contre si je me permet une petite critique
"il est un peu trop lent".
bon j'espère que vous avez compris ce que je voulais exactement mm si c po le cas et que vous répondez à coté c pas grave ça peut m'aider qd mm.
allez tcho tout le monde et surtout à ceux qui prennent la peine de lire ce message.

tartur

1 réponse

cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
23 mai 2003 à 09:41
salut,
alors :
- il faut que tu crée une interface monListener qui definisse les methodes que devra implémenter ta classe A pour réagir aux evenements que lancera B.
- il faut aussi que tu crée une classe monEvent qui servira a passer a A un evenement de B
- sur A tu fais un implements monListener
-dans B tu implemente une methode addMonListener et tu balance tes evenements
voila,
un petit exemple ? ok :
La classe B
public class B
{
private MonListener listener;

/**
* Affecte un objet comme intercepteur des messages
* envoyés par B
* @param listener -> L'objet qui va intercepter les messages
*/
public void addMonListener(MonListener paramlistener)
{
this.listener= (MonListener) AWTEventMulticaster.add(this.listener, paramlistener);
// ici tu passe en parametre le type d evenements que tu veus recuperer
// la c est ceux relatifs a la souris, si tu en veux d autres tu met d autre enableEvents
enableEvents(AWTEvent.MOUSE_EVENT_MASK);
}

// apres, la ou tu veux lancer des evenements :
// tu appelles carrement la methode qui doit reagir
// a l event en lui passant un nouvel event
if (this.listener != null)
this.listener.onClick(new MonEvent(this,MonEvent.CLICK));

}

La classe A
public class A extends JPanel implements MonListener
{
private B b;

public A()
{
this.b = new B();
b.addMonListener(this);
}

//implementation des methodes de l interface MonListener
public void onClick(MonEvent e)
{
// la tu fais ton traitement en fonction de ton event
}
}

La classe MonEvent
public class MonEvent extends AWTEvent
{
public static final int CLICK = 1;
public static final int DBLCLICK = 2;

private Object source;

public MonEvent(Object source,int id)
{
super(source,id);
this.source	= source;
}

public MonEvent(Event event)
{
super(event);
}

public Object getSource()
{
return this.source;
}
}

L interface MonListener
public interface MonListener extends ActionListener
{ 
public void onClick(MonEvent e);
}

voila voila
Duss
0
Rejoignez-nous