TextField field =newTextField(){@Overridepublicvoid replaceText(int start,int end,String text){//If the replaced text would end up being invalid, then simply//ignore this call!if(!text.matches("[a-z]")){super.replaceText(start, end, text);}}@Overridepublicvoid replaceSelection(String text){if(!text.matches("[a-z]")){super.replaceSelection(text);}}};
Si vous souhaitez créer votre utilisation d'un masque et de créer votre propre contrôle, jetez un oeil à Richard MoneyField, qui comprend également un exemple de projet et de la source. Le long de la même ligne, il y a des contrôles à restict d'entrée pour les Entiers, Doubles ou formaté couleurs web (par exemple, #rrggbb) dans le fxexperience référentiel. Tous ceux-ci suivent un thème commun où ils sous-classe Contrôle, fournir certaines propriétés à obtenir et définir qui définissent l'interface publique et puis aussi définir un privé à la sauvegarde de la peau qui gère le rendu de l'INTERFACE utilisateur basée sur les valeurs définies par l'interface publique.
NOTE: cela ne fonctionnera correctement avec le JRE 1.8.0_25 ou moins. Avec le JRE 1.8.0_48 ou 0_51, la position du curseur est toujours la valeur 0 après chaque saisie de caractères.
Non, ce n'est pas implémentée en standard JavaFX. Vous avez besoin d'utiliser une bibliothèque ou faire vous-même.
C'est ma mise en œuvre de la statique masque pour les champs de texte. Il travaille pour la date, de téléphone et d'autres types de statique des masques:
/**
* Adds a static mask to the specified text field.
* @param tf the text field.
* @param mask the mask to apply.
* Example of usage: addMask(txtDate, " / / ");
*/publicstaticvoid addMask(finalTextField tf,finalString mask){
tf.setText(mask);
addTextLimiter(tf, mask.length());
tf.textProperty().addListener(newChangeListener<String>(){@Overridepublicvoid changed(finalObservableValue<?extendsString> ov,finalString oldValue,finalString newValue){String value = stripMask(tf.getText(), mask);
tf.setText(merge(value, mask));}});
tf.setOnKeyPressed(newEventHandler<KeyEvent>(){@Overridepublicvoid handle(finalKeyEvent e){int caretPosition = tf.getCaretPosition();if(caretPosition < mask.length()-1&& mask.charAt(caretPosition)!=' '&& e.getCode()!=KeyCode.BACK_SPACE && e.getCode()!=KeyCode.LEFT){
tf.positionCaret(caretPosition +1);}}});}staticString merge(finalString value,finalString mask){finalStringBuilder sb =newStringBuilder(mask);int k =0;for(int i =0; i < mask.length(); i++){if(mask.charAt(i)==' '&& k < value.length()){
sb.setCharAt(i, value.charAt(k));
k++;}}return sb.toString();}staticString stripMask(String text,finalString mask){finalSet<String> maskChars =newHashSet<>();for(int i =0; i < mask.length(); i++){char c = mask.charAt(i);if(c !=' '){
maskChars.add(String.valueOf(c));}}for(String c : maskChars){
text = text.replace(c,"");}return text;}publicstaticvoid addTextLimiter(finalTextField tf,finalint maxLength){
tf.textProperty().addListener(newChangeListener<String>(){@Overridepublicvoid changed(finalObservableValue<?extendsString> ov,finalString oldValue,finalString newValue){if(tf.getText().length()> maxLength){String s = tf.getText().substring(0, maxLength);
tf.setText(s);}}});}
Pris en charge par l'actuelle javafx-2 plate-forme par défaut - Non, mais passer par ce lien , il a de nombreuses idées et des exemples de code pour la validation d'un Formulaire en javaFX
Malchanceux: textField.setText(oldV); entrera dans la même fonction, essais inutilement si oldVal matchs.
Si la zone de texte devient une valeur qui ne correspond avant cet écouteur est ajouté à la zone de texte, entrez un ne correspondant pas à la nouvelle valeur sera la cause d'une en boucle!!!
Pour éviter cela, il serait plus prudent d'écrire:
Mon exemple de l' masque.
À l'aide de:
etc
OriginalL'auteur vas7n
Limitant l'entrée de Richard fxexperience post:
Si vous souhaitez créer votre utilisation d'un masque et de créer votre propre contrôle, jetez un oeil à Richard MoneyField, qui comprend également un exemple de projet et de la source. Le long de la même ligne, il y a des contrôles à restict d'entrée pour les Entiers, Doubles ou formaté couleurs web (par exemple, #rrggbb) dans le fxexperience référentiel. Tous ceux-ci suivent un thème commun où ils sous-classe Contrôle, fournir certaines propriétés à obtenir et définir qui définissent l'interface publique et puis aussi définir un privé à la sauvegarde de la peau qui gère le rendu de l'INTERFACE utilisateur basée sur les valeurs définies par l'interface publique.
OriginalL'auteur jewelsea
J'ai eu les mêmes besoins. J'ai créé ce domaine, appelé SpecialTextField, et poussé dans GitHub. Exemple là aussi. Espérons que cette aide.
OriginalL'auteur Andrew
Non, ce n'est pas implémentée en standard JavaFX. Vous avez besoin d'utiliser une bibliothèque ou faire vous-même.
C'est ma mise en œuvre de la statique masque pour les champs de texte. Il travaille pour la date, de téléphone et d'autres types de statique des masques:
Voir aussi:
JavaFX 2.2 TextField maxlength
OriginalL'auteur ceklock
Pris en charge par l'actuelle javafx-2 plate-forme par défaut - Non, mais passer par ce lien , il a de nombreuses idées et des exemples de code pour la validation d'un Formulaire en javaFX
OriginalL'auteur invariant
OriginalL'auteur Mardari
Dans certains cas, je ne valide le texte de la propriété:
Malchanceux:
textField.setText(oldV);
entrera dans la même fonction, essais inutilement si oldVal matchs.Si la zone de texte devient une valeur qui ne correspond avant cet écouteur est ajouté à la zone de texte, entrez un ne correspondant pas à la nouvelle valeur sera la cause d'une en boucle!!!
Pour éviter cela, il serait plus prudent d'écrire:
OriginalL'auteur Nic Stray
J'ai écrit une classe qui étend le Champ de texte et appliquer le masque.
Et dans le FXML où est
mettre
OriginalL'auteur Michel Fernandes