bonjour
je voudrais savoir si j ai besoin d utiliser 2 methodes de la class mouseListener est ce que je suis obliger d ecrire les profils des autres methodes si oui pourquoi ?
Version imprimable
bonjour
je voudrais savoir si j ai besoin d utiliser 2 methodes de la class mouseListener est ce que je suis obliger d ecrire les profils des autres methodes si oui pourquoi ?
Non, si tu implémentes MouseListener comme ceci :
Tu n'as besoin de définir que les méthodes dont tu as besoin.Code:public class MaClasse implements MouseListener
Désolé mais tu fais erreur. MouseLisener est une interface, on doit donc implémenter toutes les méthodes.Citation:
Envoyé par muldoon
une alternatiive est d'utiliser la classe abstraite MouseAdapter. Seule les classes abstraite n'ont pas l'obligation d'implémenter les méthode d'une interface.
Il y plusieurs facon faire, en voici quelque une:
Le danger avec la class MousAdapter est de faire une erreur dans sa signature, le compliateur ne signalera pas d'erreur et l'evenement ne se produit pas.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 public calss MaClasse extends JFrame{ // inner class class clickEvent extends MouseAdapter{ pulic void mouseClicked(MouseEvent e) { // traiter l'evenment click } } // anonyme MouseAdapter clickEvent = new MouseAdapter(){ pulic void mouseClicked(MouseEvent e) { // traiter l'evenment click } }; /*constructor*/ public MaClasse(){ //ajout des Events addMouseListener(new ClickEvent()); // ou addMouseListener(clickEvent); // création d'un event anonyme addMouseListenr(new MouseAdapter(){ pulic void MouseClicked(MouseEvent e) { // ligne 1 erreur intentionnel // traiter l'evenment click } }); } }
Voir la ligne 1 :
la vraie signature est :Code:public void MouseClicked(MouseEvent e) // ne sera pas appelé
Ce genre d'erreur est évité avec les interfaces.Code:public void mouseClicked(MouseEvent e) //
Pour eviter ce genre de probleme lors d'une surcharge d'une methode, il convient d'utiliser (depuis Java 5), l'annotation @Override qui declenche une erreur a la compilation s'il n'y a aucune methode mere du meme nom :
Declenchera une erreur a la compilation puisqu'il n'existe pas de methode MouseClicked() dans MouseAdapter. Ceci passera par contre sans probleme :Code:
1
2
3
4
5 MouseAdapter clickEvent = new MouseAdapter(){ @Override public void MouseClicked(MouseEvent e) { ... } }
Code:
1
2
3
4
5 MouseAdapter clickEvent = new MouseAdapter(){ @Override public void mouseClicked(MouseEvent e) { ... } }
On apprend tous les jours... Merci bouye:king:
merci beaucoup :D