Bonjour à tous,
j'utilise un JFormattedTextField pour formatter l'entrée de prix dans un formulaire. Le prix doit avoir au maximum 10 digits entiers et 2 digits après la virgule :
Lorsque l'utilisateur entre une valeur erronée, j'aimerai que le champ s'affiche en rouge. J'ai donc rajouter un vérificateur avec la méthode setInputVerifier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DecimalFormat df = new DecimalFormat(); df.setMaximumIntegerDigits(10); df.setMaximumFractionDigits(2); DecimalFormatSymbols dcmlFS = new DecimalFormatSymbols(); dcmlFS.setDecimalSeparator(','); dcmlFS.setGroupingSeparator('.'); df.setDecimalFormatSymbols(dcmlFS); valueMontant = new JFormattedTextField(df); valueMontant.setInputVerifier(new Verificateur());
Voici le vérificateur :
Cela fonctionne correctement si l'utilisateur entre du texte alphabétique par exemple. Ce que je ne comprends pas, c'est pourquoi la méthode isEditValid() renvoie true même pour une entrée contenant 15 digits entiers. Le texte est alors pourtant formatté sur 10 digits mais aucune erreur n'est détecté. Pourquoi?
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 class Verificateur extends InputVerifier { public Verificateur() { } public boolean verify(JComponent comp) { JFormattedTextField input = (JFormattedTextField)comp; return input.isEditValid(); } public boolean shouldYieldFocus(JComponent comp) { if(verify(comp)) return true; comp.setBackground(Color.red); return false; } }
Est-il également possible d'interdir l'entrée de caractère alphanumérique de cette façon? Je sais que c'est possible avec un MaskFormatter mais comment le combiner avec mon DecimalFormat?
Merci d'avance
Partager