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 :

Comment laisser les actions de focus à son parent ?


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut Comment laisser les actions de focus à son parent ?
    Bonjour,

    J'ai un petit soucis avec le focus d'un de mes composants. Je vous expose le problème :
    J'ai un container qui contient deux autres composants.
    Lorsque l'on entre dans la région du container, je voudrais effectuer une action. Le problème est que lorsque j'entre dans le container en passant par le premier composant, c'est l'action du focus de ce composant qui est pris en compte et pas celle du container.
    Comment faire pour que le container intercepte tout les fois où il est censé gagner le focus ?

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Tu peux simplement abonner ton container aux événements de focus des 2 autres composants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonComposant.addFocusListener((FocusListener)getParent());

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    Bon ça à l'air de marcher, merci.
    J'ai même redéfini un autre FocusListener spécial pour dire que c'est le fiston.
    Par contre, j'ai l'impression que lorsque l'on passe très vite dans la zone du composant et en dehors, mais alors très vite... Parfois, des évenements ne sont pas pris en compte... Et du coup, on est considéré comme toujours dans la zone du composant...
    C'est normal ça ?

  4. #4
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Je ne pense pas que cela soit normal, il faudrait voir exactement ce que tu as fait.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2004
    Messages : 574
    Par défaut
    En fait, j'ai simplifié pour l'histoire des composants pour faire simple disons que mon conteneur peut contenir des tas d'autres composants. Mais dans tous les cas, à chaque fois que l'on est sur le container, il faut que le premier composant qu'il contient mette dans une certaine couleur une donnée qu'il contient et dès que l'on sort du container, ce composant doit avoir la couleur qui redevient normale.

    Pour le composant, j'ai surchargé sa méthode focusLost() qui ne fait rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    public void focusLost() {   
    }
    Pour le container :

    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
     
    public class MyContainer extends X {
     
        private MyComponent component = null;
     
     
        public void afterCreate() {
    ...
           // component = On récupére le composant, donc il n'est plus à null.
               component.addFocusListener(new MyFocusListener(this));            
            }
        }
     
        public void focusGained() {        
            super.focusGained();
            if (null != component) {
                    // On met à jour la donnée
            }                         
        }
     
     
        public void focusLost() {
            super.focusLost();
     
            if (null != component) {
                  // On met à jour la donnée
            }
        }
     
     
        class MyFocusListener implements FocusListener {      
     
            /** The container */
            private My container;
     
            public MyFocusListener(MyContainer container) {
                this.container = container;
            }
     
            public void focusGained(FocusEvent e) {        
                container.focusGained();            
            }
     
            /** {@inheritDoc} */
            public void focusLost(FocusEvent e) {
            }
     
        };
    }

    En fait, en écrivant tout ceci, je me rend compte d'une chose. C'est que je veux remettre la donnée à sa valeur initial que lorsque j'en suis sortie... et pas quand je sors uniquement du composant. MAis dès fois, je me demande quand on sort du composant qui est dans le container et que l'on ne se trouve plus sur le container, si le fait d'être aussi sortie du container a vraiment été pris en compte... ?

  6. #6
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    je ne suis pas sûr te comprendre exactement...pourquoi ne pas faire en sorte que MyContainer implémente FocusListener ? MyFocusListener ne sert à rien.

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/05/2011, 17h33
  2. Réponses: 8
    Dernier message: 04/04/2007, 11h16
  3. Réponses: 3
    Dernier message: 26/02/2007, 10h14
  4. Réponses: 5
    Dernier message: 31/03/2006, 18h12
  5. Comment désactiver les actions automatiques de Windows ?
    Par j-phi dans le forum API, COM et SDKs
    Réponses: 7
    Dernier message: 06/01/2005, 12h53

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