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 faire clique sur tabulation automatiquement


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
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut Comment faire clique sur tabulation automatiquement
    Bonjour tout le monde.

    J'ai deux champs de type "JTextField", "champ1TextField" et "champ2TextField", je veux lorsque je saisis deux caractères dans le "champ1TextField" le curseur passe automatiquement au "champ2TextField" comme si je clique sur tabulation.

    J'utilise la fonction suivante :

    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
     /**
        * Méthode permet de controler la saisie dans les zones de text.
        * @param textField
        */
        private void limiterSaisie(final JTextField textField , final int longuerText){
         textField.addKeyListener(new java.awt.event.KeyAdapter() {
                public void keyTyped(java.awt.event.KeyEvent evt) {
                     if (!Character.isDigit(evt.getKeyChar()) || ((JTextField)evt.getComponent()).getText().length()==longuerText ){
                        evt.setKeyChar((char)0);
                        if("champ1TextField".equals(textField.getName())){
                            getChamp2TextField().requestFocusInWindow();
                        }
                    }
                }
            });
        }
    ça marche mais le problème c'est que lorsque j'écris les deux caratères dans "champ1TextField" le curseur ne passe pas automatiquement au champ2, mais si je tape une caractère le curseur passe (moi je veux que le curseur passe automatiquement après avoir taper le deuxième caractère dans champ1).

    J'espère que j'ai bien expliqué le problème.

  2. #2
    Membre émérite

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Par défaut
    Bonjour,

    Je te conseille d'utiliser d'overrider la méthode keyReleased() plutôt que keyTyped().
    En utilisant keyReleased(), la méthode .length() te renvoie la longueur en tenant compte du dernier caractère saisi.
    Alors qu'en utilisant keyTyped(), la valeur .length() ne tient pas compte du dernier caractère saisi.

    Autre chose : j'ai un doute sur l'utilité du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    evt.setKeyChar((char) 0);
    et sur l'ordre des if. Sur ces points là, je te laisse gérer.

    Benoit

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Merci pour la réponse, mais ça marche pas, le curseur ne passe pas automatiquement à l'autre champ, je veux que lorsque je tape deux caractère le curseur passe au champ suivant comme si j'ai cliqué sur tabulation.

    Merci d'avance.

  4. #4
    Membre émérite

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Par défaut
    Bonjour,

    De tête, j'ai testé en saisissant 1 puis 2.
    1 s'est affiché dans la combo, puis 2 s'est affiché dans la combo et le focus est ensuite parti sur l'autre combo.

    Du coup, je ne comprends pas pourquoi ça ne fonctionne pas chez toi.

    Benoit

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 350
    Par défaut
    Voici le code que j'ai utilisé (j'ai laissé le keyTyped pour faire le contrôle sur les valeurs saisie : je veux empêcher la saisie des lettres et permettre que la saisie des chiffres, et la taille du champs ne doit pas dépasser 2 ou 4 selon le cas), la fonction keyReleased() n'accepte pas KEyEvent en paramètre.
    Peux-tu STP m'envoyer ton code?

    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
    private void limiterSaisie(final JTextField textField , final int longuerText){
         textField.addKeyListener(new java.awt.event.KeyAdapter() {
                public void keyTyped(java.awt.event.KeyEvent evt) {
                     if (!Character.isDigit(evt.getKeyChar()) ||
                             ((JTextField)evt.getComponent()).getText().length()==longuerText ){
                        evt.setKeyChar((char)0);
                    }
                }
                public void keyReleased(){
                    if("jourRdvTextField".equals(textField.getName())){
                            getMoisRdvTextField().requestFocusInWindow();
                        }else if("moisRdvTextField".equals(textField.getName())){
                            getAnneeRdvTextField().requestFocusInWindow();
                        }else if("anneeRdvTextField".equals(textField.getName())){
                            getHeureRdvTextField().requestFocusInWindow();
                        }else if("heureRdvTextField".equals(textField.getName())){
                            getMinuteRdvTextField().requestFocusInWindow();
                        }
                }
            });
        }
    Merci d'avance.

  6. #6
    Membre émérite

    Profil pro
    Technicien
    Inscrit en
    Février 2009
    Messages
    338
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Février 2009
    Messages : 338
    Par défaut
    La méthode keyReleased() accepte bien un KeyEvent en paramètre : http://docs.oracle.com/javase/1.5.0/docs/api/java/awt/event/KeyAdapter.html

    Je pense que la méthode telle que tu l'as faite n'est jamais appellée. Pour le code, j'avais simplement renommé ta méthode keyTyped() en keyReleased().

    Je te le ferais parvenir plus tard, si tu ne trouves pas entre temps.

    Benoit

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

Discussions similaires

  1. Comment faire SET sur une table lié a 3 autres tables
    Par Battosaiii dans le forum Oracle
    Réponses: 2
    Dernier message: 13/04/2011, 18h59
  2. [MySQL] Comment faire requete sur un champ TIMESTAMP
    Par cleminute dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/10/2009, 10h13
  3. comment faire newsletter sur dreamweaver
    Par jiji_belle dans le forum Dreamweaver
    Réponses: 2
    Dernier message: 08/09/2009, 11h44
  4. Réponses: 0
    Dernier message: 11/02/2009, 14h53
  5. Comment faire pour un envoi automatique de mail dans access
    Par chpierrot dans le forum VBA Access
    Réponses: 1
    Dernier message: 18/06/2008, 14h45

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