Bonjour à tous,
Je cherche à afficher une JProgressBar de façon modale.
Pour cela j'ai donc créé une classe TraitementLong héritant de JDialog et contenant ma JProgessBar. Puis je crée une instance de TraitementLong et je lance un thread à partir de celle-ci (via une méthode enregistrer() par exemple) afin de réaliser une tâche tout en affichant ma JProgressBar.
Cela fonctionne mais même si je met setAlwaysOnTop à true, l'utilisateur peut toujours faire d'autres actions qui risquent de rendre incohérente les données. Et je ne veux pas synchroniser tout pour ça, je préférerais rendre cette JProgressBar modale afin que l'utilisateur n'ait plus accès à rien en attendant la fin de la tâche.
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 import java.awt.Container; import java.awt.GridLayout; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JProgressBar; public class TraitementLong extends JDialog { private JProgressBar jBar; private JLabel label; private GridLayout layout; private JFrame vue; public TraitementLong(JFrame vue) { this.vue = vue; jBar = new JProgressBar(); label = new JLabel(BundleAcces.getIHMBundle().getString("ProgressBar.Label")); layout = new GridLayout(2,1); // Construction de la fenêtre Container contentPane = getContentPane(); contentPane.setLayout(layout); jBar.setIndeterminate(true); contentPane.add(jBar); contentPane.add(label); setUndecorated(true); // Affichage de la fenêtre pack(); setLocationRelativeTo(vue); setVisible(true); } public void enregistrer() { ThreadEnregistrer t = new ThreadEnregistrer(vue, this); t.start(); } }
Cependant si je rend ma JDialog modale alors la JProgressBar ne se ferme jamais (principe de "modale").
Savez vous comment je pourrais m'en tirer ?
Merci d'avance à ceux qui prendront le temps de ma lire![]()






Répondre avec citation
Partager