Bonjour,
j'ai une IHM en borderLayout dont le panneau central est composé de plusieurs panneau. Lors d'un appui sur un bouton, je veux faire apparaitre un panneau transparent avec un message d'attente sur ce panneau central.
Pour y arrivé, j'ai utilisé un OverlayLayout qui contient en premier un panneau contenant tout ce qui doit être visible en temps normal, et en deuxième un panneau transparent avec le message qui ne doit être visible que dans certains cas.
Le panneau en OverlayLayout est créé lors de la création de la fenetre de la manière suivante :
au départ, je créais et ajoutais le panneau transparent dans le constructeur d'un SwingWorker, je le rendais visible au début du doInBackground et le cachais à la fin du done() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 panneauCentreSuperposable = new JPanel(); panneauCentreSuperposable.setLayout(new OverlayLayout(panneauCentreSuperposable)); panneauCentreSuperposable.add(panneauPrincipal);
ça marchait plutôt bien, mais au final, j'ai un autre traitement qui lui n'est pas dans un SwingWorker mais pour lequel j'aimerais utiliser le même système.
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 public SwingWorkerAffichage(FenetreLAM fenetre, Mammo mammo) { this.fenetre = fenetre; this.control = fenetre.getControl(); this.mammo = mammo; this.panneauSuperposable = fenetre.getPanneauCentre(); JLabel texteAttente = new JLabel("Chargement en cours...", JLabel.CENTER); texteAttente.setForeground(Color.white); texteAttente.setFont(new Font(texteAttente.getFont().getName(), Font.BOLD, 22)); panneauAttente = new JPanel(new GridLayout(3,1)); panneauAttente.add(new JLabel()); panneauAttente.add(texteAttente); panneauAttente.add(new JLabel()); panneauAttente.setOpaque(true); panneauAttente.setBackground(new Color(0,0,0,100)); panneauSuperposable.add(panneauAttente); panneauAttente.setVisible(false); } /* (non-Javadoc) * @see javax.swing.SwingWorker#doInBackground() */ @Override protected Image[] doInBackground() throws Exception { panneauAttente.setVisible(true); Image[] images = control.afficherMammo(mammo.getNom()); return images; } @Override protected void done() { try { //[...] panneauAttente.setVisible(false); } catch (Exception ignore) { ignore.printStackTrace(); } }
Donc j'ai sortie la création du panneau transparent du swingWorker pour le mettre lors de la construction de la fenêtre :
J'ai mis le setVisible() directement à true pour tester, mais le panneauAttente n'apparait pas. Je ne comprends pas pourquoi ça marchait dans le swingWorker et que ça ne marche plus en dehors...
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 //Creation d'un panneau qui contiendra le panneauPrincipal et surlequel on pourra //ajouter un autre panneau transparent pour faire patienter lors du chargement de l'image //(possible grace a l'overlayLayout) panneauCentreSuperposable = new JPanel(); panneauCentreSuperposable.setLayout(new OverlayLayout(panneauCentreSuperposable)); panneauCentreSuperposable.add(panneauPrincipal); texteAttente = new JLabel("Analyse en cours...", JLabel.CENTER); texteAttente.setForeground(Color.white); texteAttente.setFont(new Font(texteAttente.getFont().getName(), Font.BOLD, 22)); panneauAttente = new JPanel(new GridLayout(3,1)); panneauAttente.add(new JLabel()); panneauAttente.add(texteAttente); panneauAttente.add(new JLabel()); panneauAttente.setOpaque(true); panneauAttente.setBackground(new Color(0,0,0,100)); panneauCentreSuperposable.add(panneauAttente); panneauAttente.setVisible(true);
y'a-t-il une particularité des overlayLayout qui m'échappe?







Répondre avec citation
Partager