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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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