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();
        }