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

AWT/Swing Java Discussion :

Transmettre des ActionEvent


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut Transmettre des ActionEvent
    Je cherche à savoir si l'on peut transmettre des ActionEvent.
    En gros:
    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
     
    public class Bureau extends Jframe implements ....
    {
      ...
      public void ActionPerformed(ActionEvent e)
      {
        // fco est une JDialog modal
        FenetreChoixOptions fco = new FenetreChioxOption();
        // option est une classe qui regroupe un lot d'options
        Options options= fco.show();
        // renvois de l'evennement
        e.setSource(options); // pour passer en meme temps les parametres
        /* commande d'envois*/
      }
      ...
    }
    Le deuxieme problème est pour attacher un listener à cette classe! Je fais comment?
    Merci

  2. #2
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    A quelle classe veux-tu transmettre l'ActionEvent ?

    pour attacher un ActionListener à une classe il faut qu'elle ait une méthode du style :

    public void addActionListener(ActionListener l)

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut
    Oui, justement, c'est la le problème.
    En fait j-ai une classe traitement qui devrait récupérer l'action event.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Traitement implements ActionListener
    {
      public Bureau bureau;
     
      public Traitement()
      {
        bureau = new Bureau();
        bureau.addActionListener(this);
      }
      ...
    }
    La classe Bureau ne possède pas par ses héritages de méthode addActionListener, mais je peux l'écrire. C'est juste que je vois pas comment faire.

  4. #4
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    pour que ta classe bureau gère les ActionEvent, il faut qu'elle contienne une liste l'ActionListener (tu peux utiliser la listenerList de la classe JComponent car tu hérite de JFrame)et des méthodes d'ajout et de suppression et a methode de gestion ...

    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
    public class Bureau extends Jframe implements ....
    {
      ...
        /**
         * Adds an <code>ActionListener</code> to the button.
         * @param l the <code>ActionListener</code> to be added
         */
        public void addActionListener(ActionListener l) {
            listenerList.add(ActionListener.class, l);
        }
        /**
         * Removes an <code>ActionListener</code>.
         * @param l the listener to be removed
         */
        public void removeActionListener(ActionListener l) {
    	    listenerList.remove(ActionListener.class, l);
        }
        /**
         * Notifies all listeners that have registered interest for
         * notification on this event type.  The event instance 
         * is lazily created using the <code>event</code> 
         * parameter.
         *
         * @param event  the <code>ActionEvent</code> object
         * @see EventListenerList
         */
        protected void fireActionPerformed(ActionEvent event) {
            // Guaranteed to return a non-null array
            Object[] listeners = listenerList.getListenerList();
            ActionEvent e = null;
            // Process the listeners last to first, notifying
            // those that are interested in this event
            for (int i = listeners.length-2; i>=0; i-=2) {
                if (listeners[i]==ActionListener.class) {
                    ((ActionListener)listeners[i+1]).actionPerformed(e);
                }          
            }
        }
    .....
      public void ActionPerformed(ActionEvent e)
      {
        // fco est une JDialog modal
        FenetreChoixOptions fco = new FenetreChioxOption();
        // option est une classe qui regroupe un lot d'options
        Options options= fco.show();
        // renvois de l'evennement
        e.setSource(options); // pour passer en meme temps les parametres
        /* commande d'envois*/
        fireActionPerformed(e);
      }
    ...
    }
    et voilà

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut
    cool j'essais de suite et te tient au courant. Merci

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2006
    Messages
    244
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 244
    Par défaut
    Impeccable. Ca marche super bien. Par contre une précision (au cas ou quelqu'un d'autre vient lire ce post):

    la classe JFrame dérive (hélas) de Component et pas JComponent.
    La solution, vous ajouter un champs ListenerList directement dans votre class(n'oublier donc pas de l'instancier dans le constructeur, moi j'avais oublié ).

    Merci beaucoup fnobb

  7. #7
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Oups

    il faut donc ajouter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        /** A list of event listeners for this component. */
        protected EventListenerList listenerList = new EventListenerList();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA] Transmettre des données d'une feuille à l'autre
    Par Overflow64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2005, 09h58
  2. Transmettre des commandes à un process lancé par ksh
    Par jojolepabo dans le forum Linux
    Réponses: 3
    Dernier message: 19/10/2005, 16h05
  3. Réponses: 1
    Dernier message: 25/09/2005, 20h03
  4. [Débutant] reconnaitre la provenance des ActionEvent
    Par lipao17 dans le forum AWT/Swing
    Réponses: 17
    Dernier message: 30/04/2005, 13h13
  5. transmettre des infos entre 2 forms ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 7
    Dernier message: 01/02/2004, 11h03

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