# Java > Interfaces Graphiques en Java > AWT/Swing >  [z-order] superposition de composants

## if_zen

Bonjour,

J'essaye de superposer deux panneaux en utilisant des GridBagConstraints, et cela semble fonctionner sur la plupart des composants, mais pas sur tous.
Grce  la proprit setComponentZOrder(int order) on peut dfinir qui est le panneau qui sera affich par dessus l'autre. Mais si je cre 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 :


```

```

Throriquement, 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.

Avez vous des ides pour solutionner ce problme d'affichage ? En vous remerciant.

----------


## xixi31

> on peut dfinir qui est le panneau qui sera affich par dessus l'autre


Je crois que le z-order dfinit l'ordre dans lequel les composants vont tre dssins lorsque le container se dssine; par contre, un composant peut se redssiner indpendamment et dans ce cas, le Z-order...

----------


## sinok

Utilises un JLayeredPane dans ce cas

----------


## if_zen

Mhh ok.

Je vais tudier vos rponses demain et je vous tiens au courant.
Pour la rponse de xixi, je vais tester un truc en surchargeant la mthode paint, mais pas sur que a fonctionne puisque ce ne sera pas la mthode du panneau contenant mais celle du panneau contenu qui posera problme (sachant que le panneau contenu (le spinner par exemple) ne sera pas dfini).

Pour la rponse de sinok, je vais me documenter sur le sujet, j'avoue que je ne connais pas trop ce composant.

Merci infiniment pour vos pistes en tous cas, je vous tiens au jus.

----------


## if_zen

Bonjour !

Donc comme prvu, la surcharge de repaint ne mne  rien.
Par contre j'essaye d'utiliser un JLayeredPane, a marche trs bien aprs quelques essais, mais j'avoue que je ne comprends pas exactement ce que je fais.

- On ne peut pas positionner les composant  l'aide de GridBagConstraints ?
- L'exemple fourni par sun ( http://java.sun.com/docs/books/tutor...dPaneDemo.java ) montre comment positionner les panneaux et le petit "Duke". Deux mthodes add sont employes :
add(composant, constraints, index) pour le Duke
et
add(composant, constraints) pour les panneaux.

Dans mon cas j'ai du faire ceci :


```

```

Le contentPane est le fameux JLayeredPane  prsent. Je n'ai pas pu lui dfinir de layout, et d'aprs la doc, a ne semble pas prvu pour.

Ici, les contraintes sont reprsentes par le 2 et le 0 en deuxime argument. L'index reste  0, mais si je ne le spcifie pas, l'affichage n'est pas correct.

Pouvez-vous m'clairer encore un petit peu ? 
Merci encore

----------


## gifffftane

Les layouts classiques ne sont pas prvus pour superposer des composants. Si a marche, c'est un hasard.

Il faut donc que tu gres - ou invente - toi mme un layout correspondant  la superposition que tu souhaites, ou alors, si le cas est simple, faire avec un layout null et positionner tout le monde directement.

Et ce, que ce soit avec un JLayeredPane ou avec le ZOrder.

Donc, premire bonne action de la Nouvelle Anne : fiche  la poubelle le GridBagLayout.

----------


## sinok

Eventuellement diriges toi vers l'OverlayLayout

----------


## if_zen

Bonsoir  tous,
Dsol avec les ftes de fin d'anne je mets un peu de temps  rpondre (d'ailleurs bonne anne  tous !).

Par contre j'ai un peu avanc sur mon problme ! @sinok : J'ai cru voir un miracle quand tu m'as propos l'OverlayLayout, mais en fait a ne va pas, en tout cas c'est un lment trs intressant  exploiter.

J'ai russi  faire un peu ce que je voulais en utlisant le bon vieux CardLayout, et en rendant le Panel transparent. J'arrive de la sorte  grer une sorte de glassPane pour un panneau seulement.

Je vous livre un exemple de code. Certes la transparence sur le panneau permet de voir le prcdent, et ceci est peut-tre d  un coup de chance,  voir !

(NB : Seul le bouton "Show Glass" sert  quelque chose dans ce code.)


```

```

Encore merci  tous !

----------

