Bonjour,
J'essaye de superposer deux panneaux en utilisant des GridBagConstraints, et cela semble fonctionner sur la plupart des composants, mais pas sur tous.
Grâce à la propriété setComponentZOrder(int order) on peut définir qui est le panneau qui sera affiché par dessus l'autre. Mais si je crée un panneau contenant des objets complexes, tels qu'un JSpinner par exemple, celui-ci ne semble pas positionné sous, mais sur le panneau qui est sensé être au dessus.
Voici le code qui vous permettra de mieux vous rendre compte :
Théroriquement, j'aimerais que le JSpinner ne soit plus visible. Il devrait être sous le panneau rouge. Or, la zone de texte reste visible, et les boutons s'affichent quand on passe la souris dessus.
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 public static void main(String... args) { // Nouvelle fenetre (1) javax.swing.JFrame frame = new javax.swing.JFrame(); // Panneau principal (2) javax.swing.JPanel contentPane = new javax.swing.JPanel(); // Panneau contenant tabbed + spinner (3) javax.swing.JPanel composantPane = new javax.swing.JPanel(); composantPane.setLayout(new java.awt.BorderLayout()); // TabbedPane (4) javax.swing.JTabbedPane tabbedPane = new javax.swing.JTabbedPane(); tabbedPane.addTab("Tab 1", new javax.swing.JPanel()); tabbedPane.addTab("Tab 2", new javax.swing.JPanel()); tabbedPane.addTab("Tab 3", new javax.swing.JPanel()); // Spinner (5) javax.swing.JSpinner spinner = new javax.swing.JSpinner(); // Ajout des composants dans (3) composantPane.add(spinner, java.awt.BorderLayout.NORTH); composantPane.add(tabbedPane, java.awt.BorderLayout.CENTER); // Création d'un panneau superposé au (2) javax.swing.JPanel glassPane = new javax.swing.JPanel(); glassPane.setOpaque(true); glassPane.setBackground(java.awt.Color.RED); glassPane.setBorder(javax.swing.BorderFactory.createLineBorder(java.awt.Color.GREEN)); // Ajout des composants au (2) contentPane.setLayout(new java.awt.GridBagLayout()); contentPane.setPreferredSize(new java.awt.Dimension(300,300)); java.awt.GridBagConstraints c = new java.awt.GridBagConstraints(); c.gridx=0; c.gridy=0; c.weighty=1; c.weightx=1; c.fill = java.awt.GridBagConstraints.BOTH; contentPane.add(composantPane, c); contentPane.add(glassPane, c); // Ordre des composants affichés pour (2) contentPane.setComponentZOrder(glassPane, 0); contentPane.setComponentZOrder(composantPane, 1); // Gestion de la fenêtre (1) frame.setContentPane(contentPane); frame.pack(); frame.setVisible(true); }
Avez vous des idées pour solutionner ce problème d'affichage ? En vous remerciant.
Partager