Personnaliser un événement pour une classe

Résolu
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006 - 16 sept. 2006 à 19:12
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006 - 17 sept. 2006 à 19:02
Bonjour , j'aimerai savoir si je pouvais ajouter des Listener à ma propre classe .
exemple , j'ai une classe toute simple qui dessine un triangle apres avoir joint 3 points, et j'aimerai qu'un message s'affiche si je click sur ce dessin , est ce possible ? eventuellement en implémentant une interface ou quelque chose de ce genre , merci

10 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
17 sept. 2006 à 17:58
Dans ta classe Triangle, il faut rajouter :
private IAddEvent event;

public void addRaiseEvent(IAddEvent oEvent) {
    event = oEvent;
}

et un appel à la fonction raiseEvent à l'endroit où tu veux déclencher l'événement (dans le MouseListener apparement, bien que je ne vois pas le rapport entre le clic de souris sur ton objet triangle, qui apparament n'est pas un contrôle !!!).

Et ainsi, dans la fonction

public void raiseEvent(MouseEvent e) {
 
    // koi mettre ??
}
De ton objet principal, c'est là que tu dois gérer que faire lorsque l'événement ce déclenche, comme tu le fait dans tes listeners de tes boutons.
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
16 sept. 2006 à 19:20
C'est très simple à faire : il te suffit de faire une interface et une méthode pour rajouter une instance de ton interface, par exemple :

Fichier IAddEvent.java :

Interface IAddEvent {
    public void raiseEvent();
}

Dans ta classe (partie déclarations) :

private IAddEvent event;

public void addRaiseEvent(IAddEvent oEvent) {
    event = oEvent;
}

Et enfin, pour le déclencher dans ton code :

if (event != null) {
    event.raiseEvent();
}

Voilà, c'est pas plus compliqué !
0
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006
16 sept. 2006 à 19:24
merci beaucoup , après votre explication ca parait vraiment plus simple , c'est gentil merci encore
0
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006
16 sept. 2006 à 20:07
j'ai un petit problème , peut etre ai je mal compris le fonctionnement de la chose , j'ai crée une interface comme suit
interface IAddEvent {
 public void raiseEvent();
}

ensuite dans ma classe triangle j'ai ajouté ceci

public void addRaiseEvent(IAddEvent oEvent) {
    event = oEvent;

et puis dans la classe frame qui contient la methode main , j'ai pas su quoi mettre
comment vais je declencher ceci :
if (event != null) {
    event.raiseEvent();

il me manque quelque chose , ou bien , me suis je trompé carrement dans mon interpretation des choses ? merci de m'eclairer le plus simplement possible , je ne suis pas tres familier avec les evenements
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
16 sept. 2006 à 20:41
Tout dépend quand est-ce que tu veux déclencher ton événements (à quel moment la classe qui a ajoutée un listener sur ton événement va l'intercepter).

Par exemple, ca peut-être lorsqu'un objet est complètement chargé, à ce moment là il suffit de mettre l'appel de la fonction raiseEvent à la fin du constructeur de la classe.

Pour utiliser l'événement, c'est comme pour des événements "classiques" tels que ActionListener : il suffit soit de faire :

TaClasse.addRaiseEvent(new IAddEvent() {
    public void raiseEvent() {
       System.out.println("Evenement déclenché");
    }
});

Soit de faire :

class TaClasse implements IAddEvent {

// blabla

public void raiseEvent() {
    System.out.println("Evenement déclenché");
}
};
0
Twinuts Messages postés 5373 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 10 août 2022 110
16 sept. 2006 à 20:43
Salut,

merci ne pas valider une reponse si elle ne te convient pas à 100% !!! ce qui evite aux gens de ne pas venir sur ton poste vu qu'il est validé.

je supprime donc ta validation en attendant que tu valide vraiment le poste(soit qu'il reponde à 100% à tes attentes)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006
16 sept. 2006 à 21:14
j'y arrive pas , franchement , je sais pas ce qui me manque , y t il nullepart ou je doivent mettre l'evenement click de souris par exemple ?
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
16 sept. 2006 à 21:25
fait voir ton code, ce sera plus simple.
0
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006
16 sept. 2006 à 21:37
ca c ma classe triangle qui herite d'une autre classe triangle generique :


class Triangle extends TriangleGenerik


{ static int nbr_tor=0;
 private String name;
 private ArrayList TriangleGeneriks_connu=new ArrayList();
 
 public Triangle(FeuilleDessin f)
 { //blabla }
 
 public Triangle(FeuilleDessin f,String name)
 {  //blabla   }
 
 public void reset()
   { // on initialise la position de la TriangleGenerik    }
       
}

public class SimpleLogo extends JFrame implements ActionListener,IAddEvent {


 FeuilleDessin feuille;
 //private IAddEvent event;


 
 Triangle goku;
 JTextField inputValue;


 public static final Dimension VGAP = new Dimension(1,5);
 public static final Dimension HGAP = new Dimension(5,1);


 
 // la procedure principale
 public static void main(String[] args)
 {
  System.out.println( "Logo demarre!" );
  new SimpleLogo();
 }




   void quitter()
   {
    System.exit(0);
   }




 public SimpleLogo()
 {
  super("");
  logoInit();


 }


 void logoInit(){


  //initialisation des element de la fenetre 
     


 }
public void raiseEvent(MouseEvent e) {
 
    // koi mettre ??
}


 String getInputValue(){
  //bla bla
 }
 
 /** la gestion des actions des boutons */
 public void actionPerformed(ActionEvent e)
 {
                // les events pour mes boutons , ils marchent bien
        }


   
   // efface tout et reinitialise la TriangleGenerik
   void effacer()
   {
    //blabla
   }




void addButton(JComponent p, String name, String tooltiptext, String imageName) {
   //ajout des boutons
 }


 void addMenuItem(JMenu m, String label, String command, int key) {
        //ajout des menus
 }


 


}
 dzl c long , alors resumons , mon petit triangle , je veux que lorsque je click dessus il me génére un evenement click où eventuellement je mettrais pas mal de traitement.

voilà merci bcp , excusez le derangement
0
simo_azzaoui Messages postés 11 Date d'inscription samedi 1 janvier 2005 Statut Membre Dernière intervention 21 septembre 2006
17 sept. 2006 à 19:02
ok merci , ca va aller mnt
0