[JFormattedTextField] Masque de saisie d'heure
j'ai une appli dans laquelle j'ai mis un jformattedtextfield sur lequel j'applique un mask ##:## (oui c'est pour des heures :wink: )
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:
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();
} |