Bonjour a tous,
je voudrai ouvrir une popup qui contient un gif. Cette popup servira a faire attendre l'utilisateur pendant un traitement de mon appli.
Pour ce faire, j'ai donc créer une JWindows contenant un JPanel qui contient un gif.
Ma class du JPanel
ma classe de la popup
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 import java.awt.Color; import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JPanel; @SuppressWarnings("serial") public class Gif extends JPanel { protected void paintComponent(Graphics g) { // efface le contenu précédent : g.setColor(Color.WHITE); g.fillRect(0, 0, this.getWidth(), this.getHeight()); // dessine le gif : ImageIcon icone = new ImageIcon(getClass().getResource("/resources/wait.gif")); g.drawImage(icone.getImage(), 1, 1, 220, 19, this); } }
Donc, je lance ma popup lors d'un clic sur un bouton de mon IHM principale.
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 import java.awt.BorderLayout; import javax.swing.JLabel; import javax.swing.JWindow; @SuppressWarnings("serial") public class Attente extends JWindow{ public Attente(Gestion g){ super(g); setLayout(new BorderLayout()); JLabel lab=new JLabel("Traitement en cours"); lab.setHorizontalAlignment(JLabel.CENTER); add(lab,BorderLayout.NORTH); add(new Gif()); setSize(220,35); setVisible(true); this.setLocationRelativeTo(null); } }
Le probleme est que comme le thread de mon IHM lance aussi mon traitement, je me retrouve avec une JWindow vide ....
Voici le code qui appele
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 public class EcouteurBouton implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getSource() == executer) { //lancement du compteur long start = System.currentTimeMillis(); //lancement de la popup d'attente Attente att=new Attente(g); // lancement de la résolution suivant la methode choisie switch(choixMethode.getSelectedIndex()){ case 0: //methode aléatoire Aleatoire al=new Aleatoire(taille); //traitement createVisu(al.resolution()); //traitement att.dispose(); //fermeture de la popup d'attente convertTime(System.currentTimeMillis() - start); break; ... ... ...
Donc, je pense que mon probleme vient d'un manque de thread. Alors, je voudrai savoir comment faire pour lancé ma popup dans un autre thread (il faut que la thread de l'IHM lance les traitements).
Je vous remercie d'avance pour votre aide
PS: si je lance la popup dans le main, elle fonctionne bien
Partager