Personnaliser un événement pour une classe

[Résolu]
Signaler
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006
-
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006
-
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

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
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.
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
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é !
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006

merci beaucoup , après votre explication ca parait vraiment plus simple , c'est gentil merci encore
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006

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
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
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é");
}
};
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
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
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006

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 ?
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
126
fait voir ton code, ce sera plus simple.
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006

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
Messages postés
11
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
21 septembre 2006

ok merci , ca va aller mnt