Bonjour
Je tente de limiter un JTexteField par une regexp de façon à n'autoriser que certains caractères. Je peux sans trop de problème limiter certains cas, mais je butte à partir du moment où je veux imposer une chaîne globale.
Exemple, je souhaite que je JTextField n'autorise que la rentrée de la séquence suivante: Une MAJ puis 3 Chiffres puis 2 Majuscules.
Voici mon code:
Il me semble que je butte sur le fait que les caractères entrent un pas un et que je n'ai pas compris comment gérer ce cas dans la constitution de la chaîne pour regexp.
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
30
31
32
33
34 class LimittedTextField extends JTextField { final static long serialVersionUID = 123456789L; protected Document createDefaultModel() { return new LimittedDocument(); } class LimittedDocument extends PlainDocument { private String pattern = "^([A-Z]{1})([0-9]{3})([A-Z]{2})$"; Pattern patternName = Pattern.compile(pattern); public LimittedDocument() { super(); toolkit = Toolkit.getDefaultToolkit(); } public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { String text = super.getText(0, super.getLength()) + str; Matcher theMatcher = patternName.matcher(str); if ( theMatcher.find() ) { super.insertString(offs, str, a); System.out.println(theMatcher.group()); } else { System.out.println( text + " " + str + " : no match"); } } private Toolkit toolkit; } }
Quelqu'un peut-il me donner une piste de réflexion pour que j'avance sur ce sujet, ou suis-je en train de courrir après l'impossible ?
En vous remerciant de vos conseils avisés,
Cordialement
Partager