Bonjour,
je suis face à un petit problème pour changer le texte d'un JTextField.
J'utilise un JTextField pour récupérer un nombre que doit rentrer l'utilisateur. Afin de m'assurer qu'il ne rentre que une valeur numérique, j'ai enregistré un CarretListener aupres du JTextField pour contrôler ce qui se passe.
Lorsque je reçois un CaretEvent, je récupère le contenu du JTextField et regarde si je peux ou non le transformer en valeur numérique. si c'est le cas tout va bien; sinon je voudrai remplacer le texte contenu par rien (""). Et c'est là que cela bloque car j'obtiens une IllegalStateException. Si j'ai bien compris je modifie le texte alors que ce n'est pas le bon moment.
Voici le début du StackTrace:
et le bout de code correspondant dans le CaretListener:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 java.lang.IllegalStateException: Attempt to mutate in notification at javax.swing.text.AbstractDocument.writeLock(AbstractDocument.java:1323) at javax.swing.text.AbstractDocument.replace(AbstractDocument.java:644) at javax.swing.text.JTextComponent.setText(JTextComponent.java:1693) at rails.graphique.MakeReseau.caretUpdate(MakeReseau.java:440)
C'est lorsque je fais MonJTextField.setText(""); que je lève l'exception.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 //echel est un float declare plus haut String s = MonJTextField.getText(); if ((s!=null)&&(!s.equals(""))){ try{ echel=(formatNombre.parse(s)).floatValue(); } catch (Exception erreur){ echel=0; MonJTextField.setText(""); } }
Comment résoudre ce problème: la création d'un "minithread" pour attendre quelque millisecondes résoudra-t-elle le problème ? Pas vraiment clean non plus.
merci pour votre aide.
Bon code,
kerinel
Partager