Bonjour à tous,

Besoin d'un petit coup de main sur un problème de rafraîchissement sur un JFormattedTextField. Je présente rapidement le petit projet :

Une Applet composée d'un JComboBox avec 2 choix possibles de sélection, un JFormattedTextField, et un JButton.

Je souhaite paramétrer mon JFormattedTextField de telle sorte qu'il ne puisse comporter que des 0 et des 1, mais avec un nombre total de 10 caractères si le 1er item de ma JComboBox est sélectionné et 14 caractères si c'est le 2ème item qui est sélectionné.

Voici un extrait de 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
[...]
public class MyApplet extends Applet implements ActionListener {
 
	[...]
 
	private JFormattedTextField tfSign;
 
	private JButton btGo;
 
	private JComboBox jcbCode;
 
	public void init() {
 
		[...]
 
    tfSign = new JFormattedTextField();
 
		try {
			MaskFormatter mf;
			mf = new MaskFormatter("##########");
			mf.setValidCharacters("01");
			mf.install(tfSign);
		}
		catch (ParseException e) {e.printStackTrace();}
		tfSign.setText("0000000000");
 
		btGo = new JButton("Calculer CRC");
		btGo.addActionListener(this);
 
		jcbCode = new JComboBox();
		jcbCode.addItem("Calculer un CRC pour émission");
		jcbCode.addItem("Vérifier le signal reçu");
		jcbCode.addActionListener(this);
 
		[...]
 
	}
 
	[...]
 
	@Override
	public void actionPerformed(ActionEvent e) {
 
		if (e.getSource()==btGo) {
 
			[...]
 
    }
		else if (e.getSource()==jcbCode) {
 
			if (jcbCode.getSelectedIndex()==0)  {
 
				//Passage à taille 10
				try {
					MaskFormatter mf;
					mf = new MaskFormatter("##########");
					mf.setValidCharacters("01");
					mf.install(tfSign);
				}
				catch (ParseException ex) {ex.printStackTrace();}
				tfSign.setText("0000000000");
 
				btGo.setText("Calculer CRC");
 
			}
			else {
 
				//Passage à taille 14 (10+CRC)
				try {
					MaskFormatter mf;
					mf = new MaskFormatter("##############");
					mf.setValidCharacters("01");
					mf.install(tfSign);
				}
				catch (ParseException ex) {ex.printStackTrace();}
				tfSign.setText("00000000000000");
 
				btGo.setText("Vérifier code");
 
			}
 
			this.repaint();
 
		}
	}
 
}
A l'exécution, si je modifie le selectedItem de la JComboBox, le JFormattedTextField ne change pas de capacité, et n'est même plus saisissable.

Pourtant, l'Applet semble bien se rafraîchir, puisque le texte du JButton change.

Quels sont vos avis sur la question?