[ALG2G] TD5: les listeners

Voir le sujet précédent Voir le sujet suivant Aller en bas

[ALG2G] TD5: les listeners

Message  LSV le Dim 22 Nov 2009, 15:28

Hellow tout le monde Smile

je suis en train de me battre avec mon TD5 pour essayer de comprendre l'utilisation des Listeners. Le probleme, c'est qu'actuellement, c'est moi qui perds!

rappel de l'énonce:

Dans les « modificateurs » d'attributs, il vous faudra appeler la fonction firePropertyChange pour avertir tous les écouteurs du changement.
Donc, dans la méthode "inverser", j'ai mis:
this.allume=!this.allume;
paintComponent(this.getGraphics());
firePropertyChange("allume",this.allume,!this.allume);


mais je sais pas trop comment faire en sorte que la deuxieme led "entende" que la méthode firePropertyChange a été utilisée.
Est ce que je dois mettre ce listener DANS la classe Led, ou bien dans le panneau qui contient plusieurs led?
Je pencherais pour la deuxieme possibilité, mais sait-on jamais..


Pour vérifier le bon fonctionnement de votre composant, on vous demande de coder la petite application suivante :
• La fenêtre affiche 2 leds (appelons les A et B). Le led A est vert quand il est allumé et le
B est rouge. Un est éteint et l'autre allumé.
ceci marche, pas de problemes
• Un bouton « Inverser » est présent. Lorsqu'on clique dessus, le led A s'inverse.
ceci aussi, ma premiere led s'éteint et s'allume correctement
• Un observateur du led A va permettre la synchronisation. Lorsqu'il bascule (passe de
« allumé » à « éteint » ou inversement) il met le led B dans l'autre état. Il y aura ainsi
toujours un led allumé et l'autre éteint
C'est ceci que je n'arrive pas a faire

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Wark le Dim 22 Nov 2009, 19:12

La led B doit être écouteur de la led A. Pour se faire, elle doit implémenter PropertyChangeListener et redéfinir la méthode correspondante qui sera appelée lorsque la led A fera un firepropertychange.

ps : paintComponent(Graphics g) est appelée par Java, pas besoin d'y faire explicitement appel de cette manière, un repaint() suffit. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Dim 22 Nov 2009, 19:52

Wark a écrit:
ps : paintComponent(Graphics g) est appelée par Java, pas besoin d'y faire explicitement appel de cette manière, un repaint() suffit. Smile

il nous est demandé explicitement de la redéfinir donc bon, tant qu'a faire Very Happy

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Wark le Dim 22 Nov 2009, 19:55

La redéfinir, oui. Y faire appel autrement que par la méthode repaint(), non. Wink

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  pbt le Lun 23 Nov 2009, 10:35

Petite remarque au sujet de ta méthode inverser.

Je ne ferais pas de fire dans cette méthode, je ferais appel au setter adapté (qui lui, ferait le fire). En effet, c'est le setter qui change l'état du composant, c'est donc lui qui informe ses écouteurs de son changement d'état.

Je ne fais pas non plus d'appel explicite à paintComponent comme le précise Wark. Et pous compléter Wark lorsqu'il dit que LedB doit implémenter PropertyChangeListener c'est-à-dire se définir comme un écouteur, j'ajoute qu'il doit aussi se signaler comme écouteur de LedA, c'est-à-dire s'ajouter à la liste des écouteurs (sinon il ne sera jamais informé des changement d'états de LedA).



_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Lun 23 Nov 2009, 19:28

Bon, j'ai réussi a faire fonctionner cette partie la (avec le timer qui modifie une led, et l'autre qui est modifiée par rapport a cette led).

Maintenant, je souhaite faire mon compteur binaire, seulement j'ai un petit probleme.. Je ne comprends pas comment faire en sorte que chaque led (il y a [4,16] leds) écoute la suivante.
Pour chaque led, je rajoute un propertyChangeListener:

maLed.addPropertyChangeListener("allume",monListener);

PropertyChangeListener monListener = new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent propertyChangeEvent) {

}
};

mais que mettre dans le corps de propertyChange?
Je ne vois pas comment trouver la suivante... Les leds n'ayant pas de numéro :/

je suis completement embrouillé je vous avoue :/

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Wark le Lun 23 Nov 2009, 20:45

Un tableau de led.. et chaque led n est écouteur de la led n-1.. et voilà Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Lun 23 Nov 2009, 20:50

Wark a écrit:Un tableau de led.. et chaque led n est écouteur de la led n-1.. et voilà Smile

a vrai dire, j'y avais pensé, toujours est il que, comment je fais pour utiliser ca?

dans
public void propertyChange(PropertyChangeEvent propertyChangeEvent) {

}

je mettrais quoi comme code? etant donné qu'il s'agit d'un code générique qui doit convenir a toutes les leds...
Je peux pas utiliser (pat exemple) tabLed[indexDeCetteLed+1], vu que... je n'ai pas l'index de la led en cours!

J'ai l'impression que je me trompe sur l'utilisation des listeners en réalité, mais je ne vois vraiment pas comment faire...

Tu ferais comment pour dire que, dans cet exemple:

[led1][led2][led3][led4][led5][led6][led7]

la led 7 ne doit écouter personne, mais la 6 doit l'écouter, elle même écoutée par la 5, elle même écoutée par la 4, etc?

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Wark le Lun 23 Nov 2009, 21:05

Si led6 écoute led7 ..

Code:
led7.addPropertyChangeListener(led6)

led6 étant une led, elle implémente l'interface PropertyChangeListener.. donc, le code générique se trouve dans la classe Led, tout simplement.. Wink

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Lun 23 Nov 2009, 21:25

Wark a écrit:Si led6 écoute led7 ..

Code:
led7.addPropertyChangeListener(led6)

led6 étant une led, elle implémente l'interface PropertyChangeListener.. donc, le code générique se trouve dans la classe Led, tout simplement.. Wink

Est ce que je dois overrider la méthode ou pas?
Parce que sinon, ca ne marche pas :/

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Wark le Lun 23 Nov 2009, 21:29

Tu dois forcément la réécrire .. tu hérites de cette interface. Wink

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Lun 23 Nov 2009, 21:38

bon, pour que ca marche j'essaye de le caster une led en propertyChangeListener, mais ca plante lamentablement Sad

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Wark le Lun 23 Nov 2009, 21:48

Pourquoi veux-tu caster la led ? Si tu implémentes PropertyChangeListener dans ta led, elle devient de facto ajoutable comme PropertyChangeListener à la liste d'écouteur d'une autre Led. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Lun 23 Nov 2009, 21:53

Bah justement, quand j'essaye de faire
led7.addPropertyChangeListener(led6)
j'ai une erreur disant qu'il ne trouve pas de méthode addPropertyListener qui aie besoin d'une Led..

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  pbt le Mar 24 Nov 2009, 08:44

As-tu bien compris que le composant Led devait avoir la capacité d'être écouteur et de ce fait implémenter l'interface PropertyChangeListener. Implémentation qui t'imposera la récriture de la méthode propertyChange.

Je suis un Led et lorsque le Led que j'écoute m'informe qu'il a changé et bien je change aussi ... ce qui aura comme influence d'informer le Led qui m'écoute que j'ai changé ... et ainsi de suite, tout ça se faisant (presque) tout seul.

(Peux-tu faire l'effort, si tu veux etre lu, d'utiliser la balise code lorsque tu écris ... du code. Merci).



_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  LSV le Mar 24 Nov 2009, 12:19

Effectivement, après avoir discuté avec Ward, je n'avais pas implémenté cette interface...
En fait, je pensais qu'on en héritait d'office, via JPanel.

Ca marche forcément beaucoup mieux de cette facon Very Happy

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [ALG2G] TD5: les listeners

Message  Contenu sponsorisé Aujourd'hui à 08:40


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum