j'ai une appli dans laquelle j'ai mis un jformattedtextfield sur lequel j'applique un mask ##:## (oui c'est pour des heures)
j'y ai mis une verification de chaque caracteres à l'aide d'un caretlistener
en position 0 j'autorise 0-1-2
en position 1 j'autorise 0-1-2-3 si la position 0=2, sinon j'autorise de 0à9
en position 2 ya ":" pas besoin de verifier !
en position 3 j'autorise de 0à5
en position 4 de 0à9
seulement voila, ca marche mais ya un tit soucis
si la position 1 est suppérieure à 5 bah je peux plus rien tapper
alors je me suis dit : ok on va changer le mask si c'est plus grand que 5
la encore la sollution marche, mais des que je veux effacer avec backspace, bah comme je suis en position 3 bah il force le chiffre dans le mask et je peux pas effacer, sauf avec del ...
si quelqu'un a une sollution pour mettre un mask qui ne verifi pas ce qui a deja été tappé avant, ca m'evitera de bidouillé des truc pas possibles ....
voila mon code
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
24
25
26
27
28
29 try { mf1.setMask("##:##"); if (txtDebHf.getCaretPosition() == 0) { mf1.setInvalidCharacters("3456789"); } if ((txtDebHf.getCaretPosition() == 1) && (txtDebHf.getText().charAt(0) == '2')) { //on est sur la position 2, le premier chiffre est 2, donc au max 3 mf1.setInvalidCharacters("456789"); } if ((txtDebHf.getCaretPosition() == 1) && ((txtDebHf.getText().charAt(0) == '0') || (txtDebHf.getText().charAt(0) == '1'))) { //le premier chiffre est de 0 ou 1, alors on peut allez jusqu'a 9 mf1.setInvalidCharacters(""); } if (txtDebHf.getCaretPosition() == 3) { if ( txtDebHf.getText().charAt(1) > 5) { mf1.setMask("#"+txtDebHf.getText().charAt(1)+":##"); } mf1.setInvalidCharacters("6789"); } if (txtDebHf.getCaretPosition() == 4) { mf1.setInvalidCharacters(""); } } catch (Exception ex) { ex.printStackTrace(); }
Partager