Bonjour,

Je cherche à afficher des JPanel les uns à la suite des autres en FlowLayout lorsqu'un utilisateur clique sur un bouton d'une vue notifié par un ActionEvent!

Ainsi, avec le bout de code suivant, je souhaiterai que mes JPanel appelés fenetreResultat s'affiche tels qu'ils sont construits (avec une JProgressBar vide et un JLabel indiquant "result not displayed yet") dans ma JFrame appelée grandeFenetreResultat.

Malheureusement pour moi, lorsque l'utilisateur déclenche l'évènement, le thread se lance car je le vois dans la console mais affiche le JPanel que lorsque le calcul est fini et donc le JPanel a été modifié (sa JProgressBar est plein (et encore pas toujours?! et le JLabel indique le résultat calculé).

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
public class CalculAction extends AbstractAction {
 
	// Properties
	public Fenetre fenetre;
	public GrandeFenetreResultat grandeFenetreResultat = new GrandeFenetreResultat();
	public FenetreResultat fenetreResultat;
 
	// Constructor
	public CalculAction(Fenetre fenetre, String texte) {
		super(texte);
		this.fenetre = fenetre;
	}
 
	// Méthode du CallPutFlag
	@Override
	public void actionPerformed(ActionEvent e) {
 
		// Creation de la fenetre résultat
		fenetreResultat = new FenetreResultat();
		grandeFenetreResultat.add(fenetreResultat);
		fenetreResultat.setMaxiBarre(Integer.parseInt(fenetre.getJtf9()
				.getText()));
 
		// Création d'un thread dédié au calcul
		Thread threadCalcul = new Thread() {
 
			@Override
			public void run() {
 
				if (fenetre.getCall().isSelected()) {
					fenetre.setCallPutFlag("c");
				} else if (fenetre.getPut().isSelected()) {
					fenetre.setCallPutFlag("p");
				} else if (fenetre.getCallPutFlag() == "") {
					fenetre.getResultat().setText(
							"Please choose either call or put option!");
				}
 
				// Calcul
				try {
					MonteCarloSimulationNtimes simulation = new MonteCarloSimulationNtimes(
							fenetre.getCallPutFlag(),
							Double.parseDouble(fenetre.getJtf2().getText()),
							Double.parseDouble(fenetre.getJtf3().getText()),
							Double.parseDouble(fenetre.getJtf4().getText()),
							Double.parseDouble(fenetre.getJtf5().getText()),
							Double.parseDouble(fenetre.getJtf6().getText()),
							Double.parseDouble(fenetre.getJtf7().getText()),
							Double.parseDouble(fenetre.getJtf8().getText()),
							Double.parseDouble(fenetre.getJtf9().getText()));
 
					if (fenetre.getCallPutFlag() == null) {
						fenetre.getResultat().setText(
								"Please choose either call or put option!");
					} else {
 
						double dResultat = 0;
						// Envoyer l'objet au serveur
						try {
							fenetreResultat.out.writeObject(simulation);
						} catch (IOException ioException) {
							System.out.println("Probleme d'envoi");
						}
 
						while (dResultat == 0) {
							// Recevoir l'objet
							try {
								MessageServeur msg = (MessageServeur) fenetreResultat.in
										.readObject();
 
								if (msg.resultat != 0) {
									dResultat = msg.resultat;
									fenetreResultat.getResultat().setText(
											Double.toString(dResultat));
									System.out.println(dResultat);
 
								} else if (msg.n != -1) {
									fenetreResultat.progres = msg.n;
									System.out.println(msg.n);
								}
 
							} catch (IOException ioException) {
								System.out.println("Probleme de reception");
								ioException.printStackTrace();
							} catch (ClassNotFoundException classNotFoundException) {
								System.out.println("Probleme de classe");
								classNotFoundException.printStackTrace();
							}
 
						}
 
					}
				} catch (NumberFormatException numberFormatException) {
					fenetre.getResultat()
							.setText(
									"Please give me all the characteristics of the option!");
				}
 
			}
 
		};
 
		threadCalcul.start();
 
	}
}

Merci beaucoup pour le temps que vous me consacrerez!