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:
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)
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
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("");
	}
}
C'est lorsque je fais MonJTextField.setText(""); que je lève l'exception.

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