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 :

Transferer un evenement


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut Transferer un evenement
    Bonjour,

    J'ai crée une classe A dérivant de JPanel dans lequel j'insere un JRadioButton.
    J'insere ensuite cette classe A dans un autre classe B dérivant aussi de JPanel.
    J'aimerais récupérer l'action du click sur le JRadioButton dans la classe B...

    Merci.

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Par 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
    public class A extends JPanel {
      JRadioButton radio;
     
      public A() {
        radio = new JRadioButton();
      }
     
      public JRadioButton getRadio() {
        return radio;  
      }
    }
     
    public class B extends JPanel implements ActionListener {
      A a;
     
      public B() {
        a = new A();
        add(a);
        a.getRadio().addActionListener(this);
      }
     
      public void actionPerformed(ActionEvent e) {
        ...
      }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    J'avais envisagé ce genre de réponse mais ce qui m'interesse c'est de pouvoir "propager" le(ou les) evenement(s).
    Soit: le jradio crée un evenement, la classe A l'intercepte et transfert (ou recrée) l'evenement pour que la classe B l'intercepte.

    C'est clair comme la seinoise...

  4. #4
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Il me semble que la réponse de herve91répond à ton besoin... L'événement irait du bouton vers A et B. Qu'est-ce qui ne te convient pas ? Il faut absolument une propagation de A vers B ? Pourquoi ?

  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
    Par défaut
    J'ai fait un truc similaire (transférer le clic sur un panel qui sert de renderer d'onglet de tabbedpane vers le tabbedpane). Ce qui est important, c'est le dispatch :
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    /**
         * Renderer d'onglet fermable.
         * 
         * @author rom1v
         */
        class CloseableTabComponent extends JPanel {
     
            /** Pour la sérialisation. */
            private static final long serialVersionUID = 1L;
     
            /** Label pour le titre. */
            private JLabel label;
     
            /** Bouton de fermeture de l'onglet. */
            private IconButton close;
     
            /**
             * Crée un renderer d'onglet fermable.
             * 
             * @param title
             *            Titre de l'onglet.
             * @param icon
             *            Icône de l'onglet.
             * @param tip
             *            Tip de l'onglet.
             */
            CloseableTabComponent(String title, Icon icon, String tip) {
                super(new BorderLayout());
     
                setOpaque(false);
     
                /* Dispatcher des évènements souris sur le tableau à onglets. */
                MouseListener dispatcher = new MouseListener() {
     
                    public void mouseClicked(MouseEvent e) {
                        dispatch(e);
                    }
     
                    public void mouseEntered(MouseEvent e) {
                        dispatch(e);
                    }
     
                    public void mouseExited(MouseEvent e) {
                        dispatch(e);
                    }
     
                    public void mousePressed(MouseEvent e) {
                        if(!(e.getComponent() instanceof AbstractButton))
                            dispatch(e);
                    }
     
                    public void mouseReleased(MouseEvent e) {
                        dispatch(e);
                    }
                };
     
                label = new JLabel(title, icon, SwingConstants.CENTER);
                label.setToolTipText(tip);
                label.setOpaque(false);
                label.addMouseListener(dispatcher);
                add(label);
     
                JPanel east = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
                east.add(Box.createHorizontalStrut(3));
                east.setOpaque(false);
                east.addMouseListener(dispatcher);
     
                Icon normalIcon = ImageUtilities.toIcon(ImageManager.getImageManager().getImage("close_off", 12, 12));
                Icon rolloverIcon = ImageUtilities.toIcon(ImageManager.getImageManager().getImage("close_on", 12, 12));
                close = new IconButton(normalIcon, rolloverIcon);
                close.setToolTipText("Ferme l'onglet");
     
                close.addActionListener(new ActionListener() {
     
                    public void actionPerformed(ActionEvent e) {
                        /* Cette méthode est toujours exécutée dans l'EDT, donc pas besoin de synchronisation. */
     
                        /* On récupère l'index du renderer d'onglet dans le tableau à onglets. */
                        int index = indexOfTabComponent(CloseableTabComponent.this);
                        assert index >= 0 && index < getTabCount() : "L'index doit être cohérent.";
     
                        /* On signale aux écouteurs que l'onglet va être fermé. */
                        fireTabClosing(index);
     
                        /* On supprime l'onglet à cet index. */
                        removeTab(index);
     
                        // /* On signale aux écouteurs que l'onglet a été fermé. */
                        // fireTabClosed(index);
                    }
                });
                close.addMouseListener(dispatcher);
     
                east.add(close);
     
                add(east, BorderLayout.EAST);
     
                addMouseListener(dispatcher);
            }
        }
     
        /**
         * Dispatche les évènements souris sur le tableau à onglets.
         * 
         * @param e
         *            Évènement souris déclenché.
         */
        private void dispatch(MouseEvent e) {
            MouseEvent event = SwingUtilities.convertMouseEvent(e.getComponent(), e, ExtendedTabbedPane.this);
            ExtendedTabbedPane.this.dispatchEvent(event);
        }

  6. #6
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Par défaut
    Merci pour vos réponses.


    spekal: Car je veux juste savoir qu'une action s'est produite.
    Imagine qu'il y ait plusieurs JRadio et que chacun alimente la meme variable à sa façon.
    Le but est donc de savoir qu'il y ait eu une action et de récuperer la variable.

    ®om: j'avais deja vu ton post, j'ai tésté ca fonctionne pas pour un ActionListener... j'ai peut être fais une mauvaise manip je vais retenter et laisser mon code si ca foire.

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

Discussions similaires

  1. [VB6] Interception des évènement Copier/Couper/Coller
    Par youtch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/10/2002, 17h09
  2. [VB6] Evenement validate
    Par grosjej dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/09/2002, 15h46
  3. Evenement Change
    Par PierDIDI dans le forum Composants VCL
    Réponses: 3
    Dernier message: 28/08/2002, 10h08
  4. develloppement avec ORBit: service d'evenement
    Par belmontv dans le forum CORBA
    Réponses: 3
    Dernier message: 06/06/2002, 22h56
  5. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21

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