IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Ecouteur d'évenements en Java


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut Ecouteur d'évenements en Java
    Bonjour tout le monde,

    Je voulais savoir s'il est possible d'écrire un écouteur d'évènement qui puisse savoir si une méthode quelconque vient de s'exécuter et en recuperer son nom, les noms de ses paramètres.

    merci.

  2. #2
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    si c'est pour une de tes propres classes oui.

    il faut faire ton propre EvenObject et EventListener.
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    /*
     * TreeEvent.java
     *
     * Created on 3 juillet 2007, 19:48
     *
     * To change this template, choose Tools | Template Manager
     * and open the template in the editor.
     */
     
    package altersig.lib.gui.nav;
     
    import java.util.EventObject;
    import org.geotools.map.MapContext;
    import org.jdesktop.swingx.JXTreeTable;
     
    /**
     *
     * @author eclesia
     */
    public class TreeEvent extends EventObject{
     
        private MapContext mapcontext;
        private int fromindex;
        private int toindex;
     
     
        public TreeEvent(JXMapContextTree treetable, MapContext mapcontext, int fromindex, int toindex) {
            super(treetable);
            this.mapcontext = mapcontext;
            this.fromindex = fromindex;
            this.toindex = toindex;        
        }
     
     
     
     
        public TreeEvent(JXMapContextTree treetable, MapContext mapcontext, int position) {
            super(treetable);
            this.mapcontext = mapcontext;
            this.fromindex = position;
            this.toindex = position;
        }
     
     
        public MapContext getMapContext() {
            return this.mapcontext;
        }
     
     
        public int getFromIndex() {
            return this.fromindex;
        }
     
     
        public int getToIndex() {
            return this.toindex;
        }
     
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    package altersig.lib.gui.nav;
     
    import java.util.EventListener;
     
    /**
     *
     * @author eclesia
     */
    public interface TreeListener extends EventListener{
     
     
        public void ContextAdded(TreeEvent event) ;
     
        public void ContextRemoved(TreeEvent event);
     
        public void ContextActivate(TreeEvent event);
     
        public void ContextMoved(TreeEvent event);
     
    }


    si c'est pour une classe de la JVM, tout les ecouteurs dont tu as besoin peuvent deja etre implemente. (actionlistenr,focuslistener...etc...)

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Hello,

    Les écouteurs, en java, s'implémentent selon un modèle proche du pattern Observer...

    Dans l'idée, tu as une liste d'abonnés (List<MyListener>) qui est notifiée lorsque tel ou tel événement se produit (via appel d'une méthode).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
     
    // Interface des écouteurs. Implémentent onMyMethod, qui est levé à chaque fois que "myMethod" est appelé sur une instance de MyClass.
    interface MyClassListener {
        void onMyMethod(MyClassEvent event);
    }
     
    // Paramètre passé lors de la levée d'un événement
    class MyClassEvent extends EventObject {
        MyClassEvent(Object source) {
            super(source);
        }
    }
     
    // Classe qui produit des événements
    class MyClass {
        private List<MyClassListener> listeners = new ArrayList<MyClassListener>();
     
        // Ajoute un écouteur
        void addMyClassListener(MyClassListener listener) {
            listeners.add(listener);
        }
     
        // Supprime un écouteur
        void removeMyClassListener(MyClassListener listener) {
            listeners.remove(listener);
        }
     
        // Génère l'événement vers tous les écouteurs
        private void fireOnMyMethod(MyClassEvent event) {
            for (MyClassListener l : listeners) {
                l.onMyMethod(event);
            }
        }
     
        // Méthode qui est écoutée
        public void myMethod() {
            fireOnMyMethod(new MyClassEvent(this));
            // work here...
        }    
    }
    Ensuite, pour avoir tous les paramètres qui sont passés à myMethod, il faut soit modifier la signature de "onMyMethod" et ajouter les paramètres, soit les encapsuler dans les instances de "MyClassEvent"-


  4. #4
    Membre expérimenté Avatar de hydraland
    Profil pro
    Développeur Java
    Inscrit en
    Mai 2006
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mai 2006
    Messages : 179
    Par défaut
    Salut,

    Si tu veux faire ce que tu demandes je te conseille d'utiliser les Aspect. Personellement j'utilise AspectJ.

    A+
    Hydraland

  5. #5
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut
    Merci, je farai les essais.

    A+

  7. #7
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Pour la même problématique, j'avais utilisé ProperyChangeSupport et PropertyChangeListener. C'est très simple à mettre en place.

    L'inconvénient est qu'il faut invoquer "manuellement" le PropertyChangeSupport pour notifier les changements qui t'intéressent.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  8. #8
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2005
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mali

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2005
    Messages : 246
    Par défaut
    Est il possible d'avoir un exemple ?

  9. #9
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    1) Dans la classe que tu veux suivre, tu déclares une variable de classe de type "PropertyChangeSupport"

    2) Tu crées des méthodes:
    - d'enregistrement des listeners
    - de désenregistrement des listeners
    - de propagation des changements
    => ces méthodes ne sont que des relais qui invoquent les mêmes méthodes de ton instance de PropertyChangeSupport

    3) Les classes qui doivent être informées implémentent une interface Listener et s'inscrivent à l'instanciation à la classe qu'elle doivent suivre

    4) La classe à suivre invoque la méthode de propagation des changements quand elle a une information pertinente pour les classes réceptrices
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 912
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 912
    Billets dans le blog
    54
    Par défaut
    La question etant somme toute tres generique et pas trop liee a Swing/AWT (a priori) je serai tente de dire d'aller voir du cote de l'API de deboggage...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par CyberChouan
    1) Dans la classe que tu veux suivre, tu déclares une variable de classe de type "PropertyChangeSupport"
    Que pensez-vous de PropertyChangeListener/PropertyChangeSupport?

    Moi je trouve que c'est trop "runtime", quand on implémente PropertyChangeListener on ne sait pas ce que l'on peut écouter (c'est juste des tests de Strings), contrairement à un vrai Listener où il y a une méthode par évènement, mais bien sûr c'est plus long à écrire...

Discussions similaires

  1. Ecouteur sur un dossier java
    Par inesEsprit dans le forum Général Java
    Réponses: 2
    Dernier message: 07/09/2012, 11h56
  2. [JNI] Remontée d'évenements DLL C++ vers Java
    Par eag35 dans le forum Entrée/Sortie
    Réponses: 14
    Dernier message: 16/09/2007, 20h53
  3. [Java beans]avantage des évenements
    Par Lethal dans le forum Langage
    Réponses: 8
    Dernier message: 21/08/2007, 16h00
  4. [Debutant] Gestionnaire d'évenement en Java ?
    Par benwa dans le forum Général Java
    Réponses: 3
    Dernier message: 02/05/2007, 17h13
  5. ecouteur clavier en java
    Par sasususu dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 17/04/2007, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo