2010-09-21 6 views
0

J'utilise un JFormattedTextField pour un numéro de téléphone et seulement pour accepter les valeurs numériques iavec NumberFormatted Factory Java balance

déclarerons comme « nouvelle NumberFormatterFactory (Integer.class, false) ». Maintenant, le problème est lorsque le numéro commence par 0 (zéro) comme 001345 .., après avoir entré la valeur et déplacé à la colonne suivante la valeur entrée est rognée comme 1345 .. ici, il n'accepte pas le 0 comme le numéro de départ .

comment puis-je entrer le numéro commence par 0

+1

001345 est le même 1345. Si vous êtes intéressé par les chiffres zéro, vous ne cherchez pas le nombre (entier), mais vous recherchez probablement une chaîne avec des caractères numériques uniquement. – Thirler

+0

Si vous le déclarez comme Integer 0 ne sera pas considéré. – YoK

Répondre

0

Si vous déclarez comme new NumberFormatterFactory(Integer.class, false) qui est seulement Integer, 0 être considéré comme l'habitude. Vous devez le changer en autre formateur et ne pas stocker le numéro de téléphone en tant que numéro (c'est-à-dire en nombre entier).

Vérifiez cet exemple pour le numéro de téléphone de mise en forme:

http://www.java2s.com/Code/Java/Swing-JFC/JFormattedTextFieldaninputmaskforatelephonenumber.htm

http://www.ibm.com/developerworks/java/library/j-mer0625/index.html

0

Oui, les numéros de téléphone sont légèrement différents des entiers en ce sens.

Après this example à vous pouvez le résoudre en utilisant des expressions régulières comme ceci:

import java.text.ParseException; 
import java.util.regex.*; 

import javax.swing.*; 
import javax.swing.text.DefaultFormatter; 

class RegexFormatter extends DefaultFormatter { 
    private Pattern pattern; 

    private Matcher matcher; 

    public RegexFormatter() { 
     super(); 
    } 

    public RegexFormatter(String pattern) throws PatternSyntaxException { 
     this(); 
     setPattern(Pattern.compile(pattern)); 
    } 

    public RegexFormatter(Pattern pattern) { 
     this(); 
     setPattern(pattern); 
    } 

    public void setPattern(Pattern pattern) { 
     this.pattern = pattern; 
    } 

    public Pattern getPattern() { 
     return pattern; 
    } 

    protected void setMatcher(Matcher matcher) { 
     this.matcher = matcher; 
    } 

    protected Matcher getMatcher() { 
     return matcher; 
    } 

    public Object stringToValue(String text) throws ParseException { 
     Pattern pattern = getPattern(); 

     if (pattern != null) { 
      Matcher matcher = pattern.matcher(text); 

      if (matcher.matches()) { 
       setMatcher(matcher); 
       return super.stringToValue(text); 
      } 
      throw new ParseException("Pattern did not match", 0); 
     } 
     return text; 
    } 
} 


public class Test { 
    public static void main(String[] a) { 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JFormattedTextField formattedField = 
       new JFormattedTextField(new RegexFormatter("\\d*")); 
     frame.add(formattedField, "North"); 
     frame.add(new JTextField(), "South"); 
     frame.setSize(300, 200); 
     frame.setVisible(true); 
    } 
}