2017-08-12 1 views
0

Salut, je suis en train d'ajouter un formattage espace fonctionalité à mon textfield (je suis en utilisant JFoenix) mon objectif est d'écrire 100000 comme 10 00 00 et 1000000 comme 1 00 00 00Comment formater JFXTextField pour ajouter des espaces sur deux caractères?

ici est ma tentative mais mon résultat est inverse parce que le caret est position perdante.

public static void setup(JFXTextField textField) { 
    textField.setOnKeyReleased(value->{ 
     String entredText = textField.getText(); 
     String noSpaced = entredText.replaceAll("\\s+",""); 
     StringBuilder builder = new StringBuilder(); 
     for (int i = 0; i < noSpaced.length(); i++) { 
      builder.append(noSpaced.charAt(i)); 
      if (i%2==0) { 
       builder.append(" "); 
      } 
     } 
     textField.setText(builder.toString()); 
     }); 
} 

pour le test des questions que je ne suis pas face ici sont: des espaces beaucoup et l'écriture est inversée

grâce à Armel Sahamene réponse que nous avons la question de l'espacement fixe, mais pas la marche arrière un

123456 devrait être 12 34 56 mais le résultat est 65 43 21

grâce

Répondre

1

Les solutions possibles sont déjà répondu here.

Pour votre cas, je recommanderais d'utiliser MaskField.

+0

en utilisant Jfoenix maskfield est super mais pas une solution désirée –

1

votre format dépend de la longueur de la chaîne noSpaced. donc fixer votre si la condition comme ceci:

public static void setup(JFXTextField textField) { 
textField.setOnKeyReleased(value->{ 
    String entredText = textField.getText(); 
    String noSpaced = entredText.replaceAll("\\s+",""); 
    StringBuilder builder = new StringBuilder(); 
    for (int i = 0; i < noSpaced.length(); i++) { 
     builder.append(noSpaced.charAt(i)); 
     if ((i % 2 == 0 && noSpaced.length() % 2 == 1) || (i % 2 == 1 && noSpaced.length() % 2 == 0)) { 
      builder.append(" "); 
     } 
    } 
    textField.setText(builder.toString()); 
    }); 

}

+0

le problème ici est il ya encore le problème de format inversé essayez d'écrire 123987 qui devrait être 12 39 87 mais vous obtiendrez 78 93 21 Comment résoudre ce problème? savoir est dû à la position du curseur –