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 :

[Swing] KeyListener


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut [Swing] KeyListener
    Bonjour,

    voilà , dans mon application j'ai des JTextField qui ne peuvent contenir que des chiffres.
    j'ai fais un KeyListener sur les textField et je n'accepte que les chiffres, mais ce code ne marche pas pour certaines lettre (a,i,d,f,g,h,c,b)

    voici mon 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
    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
     
    private class MyKeyList implements KeyListener {
      public void keyTyped(KeyEvent e) {
       if (e.getKeyChar() != KeyEvent.VK_0
         && e.getKeyChar() != KeyEvent.VK_1
         && e.getKeyChar() != KeyEvent.VK_2
         && e.getKeyChar() != KeyEvent.VK_3
         && e.getKeyChar() != KeyEvent.VK_4
         && e.getKeyChar() != KeyEvent.VK_5
         && e.getKeyChar() != KeyEvent.VK_6
         && e.getKeyChar() != KeyEvent.VK_7
         && e.getKeyChar() != KeyEvent.VK_8
         && e.getKeyChar() != KeyEvent.VK_9
         && e.getKeyChar() != KeyEvent.VK_NUMPAD0
         && e.getKeyChar() != KeyEvent.VK_NUMPAD1
         && e.getKeyChar() != KeyEvent.VK_NUMPAD2
         && e.getKeyChar() != KeyEvent.VK_NUMPAD3
         && e.getKeyChar() != KeyEvent.VK_NUMPAD4
         && e.getKeyChar() != KeyEvent.VK_NUMPAD5
         && e.getKeyChar() != KeyEvent.VK_NUMPAD6
         && e.getKeyChar() != KeyEvent.VK_NUMPAD7
         && e.getKeyChar() != KeyEvent.VK_NUMPAD8
         && e.getKeyChar() != KeyEvent.VK_NUMPAD9
         && e.getKeyChar() != KeyEvent.VK_BACK_SPACE
         && e.getKeyChar() != KeyEvent.VK_DELETE
         && e.getKeyChar() != KeyEvent.VK_SHIFT) {
        JOptionPane.showMessageDialog(null, "You must enter numbers",
          "Information", JOptionPane.WARNING_MESSAGE);
        if (e.getSource() == txtFH) {
         txtFH.setText("");
        }
        if (e.getSource() == txtTH) {
         txtTH.setText("");
        }
        if (e.getSource() == txtFM) {
         txtFM.setText("");
        }
        if (e.getSource() == txtTM) {
         txtTM.setText("");
        }
        if (e.getSource() == txtTime) {
         txtTime.setText("");
        }
       }
      }
      public void keyPressed(KeyEvent e) {}
      public void keyReleased(KeyEvent e) {}
     }
    Pouvez-vous m'aider?

    merci de vos réponses

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    Je ne sais pas si c'est la bonne méthode d'écouter chaque lettre entrée par ton utilisateur... Personnellement j'aurais plus utilisé des expressions régulières avec un contrôle lors de changement de focus ... parce que là ton code semble correct !!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    ha ok...


    Citation Envoyé par PoPeio
    Je ne sais pas si c'est la bonne méthode d'écouter chaque lettre entrée par ton utilisateur... Personnellement j'aurais plus utilisé des expressions régulières avec un contrôle lors de changement de focus ... parce que là ton code semble correct !!
    c'est à dire?

  4. #4
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Hum si j'etais toi ...sur le KeyTyped, plutot que de verifier l'evenement e pressé ... je vérifierai plutot le contenu du text (si c'est possible) ... un truc dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void keyTyped(e){
         try{
              Integer.intValue(this.getText()); 
              //ou doubleValue, floatValue, ... selon ce que tu veux
         }catch(Exception e){
              System.out.println("N'entrez que des valeurs chiffrées !!!");
         }
    }
    Maintenan, il faut vérifier si le getText() prendra en compte ton nouveau caractère ou non ... je ne sais pas trop ... et je crois que ca va être difficile

    Sinon comme il l'a été dit ci dessus, tu implementes le focusLost() du FocusListener et tu mets le contenu que j'ai ecrit ci dessus ;-)
    Un truc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Truc extends TextField implements FocusListener,...{
    ...
    public void focusLost(e){
         try{
              Integer.intValue(this.getText()); 
              //ou doubleValue, floatValue, ... selon ce que tu veux
         }catch(Exception e){
              System.out.println("N'entrez que des valeurs chiffrées !!!");
              this.requestFocus();
         }
    }

  5. #5
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    Les expressions régulières permettent de chercher des chaines de caractères à l'intérieur d'autres chaines de catactère..

    Tout d'abors importe le package

    voici un exemple d'implémentation qui devrait te servir


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Truc extends TextField implements FocusListener,...{
    ...
    public void focusLost(e){
         try{
          Pattern p = Pattern.compile("[^0-9]");
          Matcher m = p.matcher(this.getText());
          if (m.find())
              JOptionPane.showMessageDialog(null, "You must enter numbers",
          "Information", JOptionPane.WARNING_MESSAGE);      
          this.requestFocus();
         }
    }
    j'ai pas testé mais c'est dans le style

  6. #6
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    Les expressions régulières permettent de chercher des chaines de caractères à l'intérieur d'autres chaines de catactère..

    Tout d'abors importe le package

    voici un exemple d'implémentation qui devrait te servir


    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
     
    public class Truc extends TextField implements FocusListener,...{
    ...
    public void focusLost(e){
         try{
          Pattern p = Pattern.compile("[^0-9]");
          Matcher m = p.matcher(this.getText());
          if (m.find())
    {
              JOptionPane.showMessageDialog(null, "You must enter numbers",
          "Information", JOptionPane.WARNING_MESSAGE);      
          this.requestFocus();
         }
    }
    }
    j'ai pas testé mais c'est dans le style

  7. #7
    Membre émérite Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Par défaut
    Je crois que tu vas avoir un probleme si l'expression contient plusieurs chiffres Popeio

    je compléterai l'expression régulière par [^0-9]* ... mais sinon, cette solution marchera très bien oué ... surtout si l'expression est plus spécifique que ce que proposent les classes Integer, Float, Double, etc.

  8. #8
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    tu as tout à fait raison !!!
    il faudra utiliser :

    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
     
    public class Truc extends TextField implements FocusListener,...{
    ...
    public void focusLost(e){
         try{
          Pattern p = Pattern.compile("[^0-9]*");
          Matcher m = p.matcher(this.getText());
          if (m.find())
    {
              JOptionPane.showMessageDialog(null, "You must enter numbers",
          "Information", JOptionPane.WARNING_MESSAGE);      
          this.requestFocus();
         }
    }
    }
    la petite * signifiant que le contrôle sera effectué pour chaque caractère de ta chaine !!

    Merci BizuR ... quelle classe !

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Pour ce genre d'utilisation, un JFormattedTextField sera certainement plus approprié.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  10. #10
    Membre éprouvé
    Inscrit en
    Mars 2006
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 137
    Par défaut
    sachant que cette classe n'est disponible qu'à partir du jdk 1.4

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Par défaut
    Ha oui, merci, ça marche super!!

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

Discussions similaires

  1. KeyListener pour un jeu en Swing
    Par vieks dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 21/06/2011, 05h20
  2. KeyListener + interface graphique swing
    Par kessentini.amir dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 04/04/2011, 10h28
  3. [SWING~JTable] Récupération d'un KeyListener
    Par JMLLB dans le forum Composants
    Réponses: 2
    Dernier message: 27/03/2007, 09h32
  4. [SWING] KeyListener qui ne marche pas
    Par kindool dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/01/2005, 19h04
  5. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35

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