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 :

Tester le FocusGained et réagir au FocusLost


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Par défaut Tester le FocusGained et réagir au FocusLost
    Bonjour,

    Je viens de construire un panel où il y a plusieurs JTextField.

    L’idée est que si je me déplace du premier vers le deuxième, je fait un FocusLost mais si je me déplace vers le 3ème qui me conduit à affecter l'événement du FocusGained à une variable, puis je fait rien dans le FocusLost, et si je me déplace vers un autre, le 1er par exemple, ou même le deuxième j’exécute le focuslost en me servant du focus précédent

    Est-ce faisable selon vous ?

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    oui c'est faisable. Il faut affecter un écouteur de focus à tous vos JTextField, et y faire un test afin de savoir quel est le composant qui a déclenché l'évènement. Ensuite il suffira de faire le traitement approprié selon le composant.

  3. #3
    Membre averti
    Inscrit en
    Mai 2006
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 26
    Par défaut
    voila la solution que j'ai trouvé
    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
     
        private void focusedit(boolean abool){
        {
         if(abool){
         if(Component==getJTextField()){CalculedepuitsPrixUnitaire();}
         else if(Component==getJTextField1()){CalculedepuitsPrixTotale();}
         else if(Component==getJTextField3()){CalculedepuitsCoutUnitaire();}
         else if(Component==getJTextField4()){CalculedepuitsCoutTotal();}
         else if(Component==((JSpinner.DefaultEditor) getJSpinner().getEditor()).getTextField()||Component==getJTextField2())
         {
          if(perdantFocus==getJTextField()){CalculedepuitsPrixUnitaire();}
          else if(perdantFocus==getJTextField1()){CalculedepuitsPrixTotale();}
          else if(perdantFocus==getJTextField3()){CalculedepuitsCoutUnitaire();}
          else if(perdantFocus==getJTextField4()){CalculedepuitsCoutTotal();}
         }
                //getJFrame().repaint();
         }
         if(Component!=((JSpinner.DefaultEditor) getJSpinner().getEditor()).getTextField()&& Component!=getJTextField2())
          perdantFocus=Component;}
        }
        @Override
        public void focusGained(FocusEvent arg0) {
         // TODO Auto-generated method stub
         while(semaphore2==1);
         semaphore=1;
         if (!arg0.isTemporary())
          if(arg0.getComponent()!=((JSpinner.DefaultEditor) getJSpinner().getEditor()).getTextField()
           &&arg0.getComponent()!=getJTextField2())
           focusedit(true);
          else
           focusedit(false);
         semaphore=0;
        }
        @Override
        public void focusLost(FocusEvent arg0) {
         // TODO Auto-generated method stub  
         while(semaphore==1);
             semaphore2 =1;
         if (!arg0.isTemporary()){
          Component=arg0.getComponent();
          semaphore2 = 0;
        }
        }
    mai il y a un problème,quand je bascule vers une autre fram j’obtiens une boucle infini

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    il faudrait déboguer "pas à pas" afin de comprendre le mécanisme qui fait que les appels sont récursifs.

    Ce que vous pouvez faire éventuellement, c'est de mettre un drapeau conditionnel qui empêche le traitement des gain et perte de focus lorsque la fenêtre contenant ces composants n'a pas le focus. Ceci dit, cela reste une solution de secours. Il faut plutôt traiter le problème à sa source.

Discussions similaires

  1. [JTextField] Inhiber FocusLost / FocusGained Event
    Par roberto1 dans le forum Composants
    Réponses: 10
    Dernier message: 25/10/2006, 21h22
  2. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 12h54
  3. [VB6] [Interface] Tester le Type de Controle
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 16/09/2002, 10h51
  4. [ADO] Tester l'existence d'une table
    Par nd25 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 05/09/2002, 14h55
  5. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 13h43

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