2017-03-27 2 views
1

J'ai vérifié la vérification de l'entrée dans un JTextField mais d'après ce que je peux voir, il est seulement possible de vérifier si l'entrée est string, integer ou digit. Quelqu'un pourrait-il suggérer comment je pourrais vérifier la valeur spécifique du chiffre? Par exemple, si elle est dans la plage 0.5 - 1. Je vous remercie.Confirmer si un JTextField contient des valeurs 0.5-1?

+1

Jetez un oeil à [JFormattedTextField] (http://docs.oracle.com/javase/7/docs/api/javax/swing/JFormattedTex tField.html), ce [site] (http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html) aide à expliquer comment l'utiliser. –

+0

merci, celui-ci m'aidera j'espère – Mapet

+2

'SpinnerModel model = new SpinnerNumberModel (.5, .5, 1, .01); JSpinner numberRange = new JSpinner (model); ' –

Répondre

0

Une façon de le faire serait d'analyser votre valeur du champ de texte à un flotteur comme celui-ci

float tfValue = Float.parseFloat(jTextField1.getText()); 

Ensuite, vous pouvez vérifier si modulo 1 est égal à 0. Si cela est vrai, la valeur est un nombre entier .

if (tfValue % 1 == 0) { 
     System.out.println("is an integer"); 
    } 
    else System.out.println("is a float"); 
+0

Si le' String' renvoyé par 'JTextField.getText()' contient autre chose que des chiffres numériques, l'analyse retournera une 'NumberFormatException'. Si vous deviez approcher cette méthode, vous auriez besoin d'utiliser un RegEx avant l'analyse. –

0

essayer cela, il est peut-être une aide pour vous

   JTextField field = new JTextField(); 
       field.addKeyListener(new java.awt.event.KeyAdapter() { 

        public void keyTyped(java.awt.event.KeyEvent evt) { 
         String text = ((JTextField)evt.getSource()).getText(); 
         if (!(evt.getKeyChar() >= '0' && evt.getKeyChar() <= '9')) { 
          // it is number 
         } 
         else if (!(evt.getKeyChar() >= 'a' && evt.getKeyChar() <= 'Z')) { 
          // it is char a-Z 
         } 
         else { 
          // it others 
         } 
        } 
       }); 

mais la meilleure façon pour les nombres est d'utiliser JFormattedTextField avec masque spécifiées

+0

En règle générale, vous n'écoutez pas les événements de clé/souris bruts sur les composants de texte mais sur le document sous-jacent. –

+0

@Abihabi 87 j'ai besoin spécifiquement d'avoir une sorte de validation que l'utilisateur fait entrée entre 0.5 et 1 si ce n'est pas le cas alors ne le laissez pas aller plus loin – Mapet

2

Deux façons possibles:

Parse le contenu JTextField à une variable double et utilisez une instruction simple if. Vous devez utiliser un bloc try catch pour gérer une exception NumberFormatException possible (si votre texte ne peut pas être converti en double).

Exemple:

double value = 0; 
try { 
    value = Double.parseDouble (yourTextField.getText()); 
} 
catch (NumberFormatException e) { 
    // Handle exception ... 
} 
if (value >= 0.5 && value <= 1) { 
    // ... 
} 
else { 
    // ... 
} 

Vous pouvez également vérifier si votre texte correspond à une donnée (smart) expression régulière. Considérez le modèle suivant (vous avez besoin de deux barres obliques inverses pour échapper un point et d'autres caractères spéciaux): (1 (\. 0 *)? | 0? \. [5-9] [0-9] *)

ce modèle accepte 1 (ou 1 suivi de séparateur décimal et un nombre quelconque d'occurrences de zéros) ou un nombre compris entre 0,5 (cette expression rationnelle permet » 0,5") et 0,99999 ...

Exemple (en utilisant java.util.regex.Pattern):

System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "0.4")); // -> false 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "0..5")); // -> false 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "0.111")); // -> false 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "0.5")); // -> true 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "0.5000543")); // -> true 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "0.50+")); // -> false 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "1.0")); // -> true 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "1.0000")); // -> true 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "1")); // -> true 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", "21")); // -> false 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", ".56256")); // -> true 
System.out.println (Pattern.matches ("(1(\\.0*)?|0?\\.[5-9][0-9]*)", ".46256")); // -> false 
+0

oui merci, cela a fonctionné :) – Mapet

+0

@Mapet Je suis heureux de entendez-le. S'il vous plaît envisager d'accepter ma réponse :) – Ansharja