Bonsoir,
Depuis quelques temps je me casse les dents sur un concept qui m'a l'air pourtant tout simple en Swing.
Le principe est d'avoir un bouton dans un panel ; un clic déclenche une méthode qui va mettre à jour le contenu du panel successivement. Le problème étant jusqu'à présent, le jpanel n'actualise son affichage uniquement quand la méthode est finie.
Voici un petit exemple de code exprimant le problème :
J'ai beaucoup lu de solutions à base de Swingworker mais je ne dois pas m'y prendre de la bonne manière car en créant un Swingworker dans la méthode de l'écouteur, le résultat ne varie pas.
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 public class panel extends JPanel { private JLabel lblLabel; /** * Create the panel. */ public panel() { setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); lblLabel = new JLabel("label"); add(lblLabel); JButton btnDone = new JButton("done"); btnDone.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { timeConsummingMethod(); } }); add(btnDone); } /** * Do something taking long updating JPanel */ void timeConsummingMethod() { for (int j = 1; j <= 10000; j++) { lblLabel.setText("Intération numéro " + 9); validate(); System.out.println("I should update the label but i'm not"); } } public static void main(String[] args) { JFrame frame = new JFrame("test"); frame.add(new panel()); frame.pack(); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
Merci pour votre éclairage
Partager