# Java > Interfaces Graphiques en Java > AWT/Swing >  [Swing] Ajouter un background de type image

## TekP@f

Salut,

J'ai termin de dvelopper une appli Swing et je dois maintenant ajouter la couche graphique. Etant issue du monde web, j'ai demand un dcoupage des images pour chaque bouton et une image reprsentant le fond d'cran. 

J'ai lu qq liens pour mettre une image en fond d'cran : 
http://www.java2s.com/Code/Java/Swin...roundimage.htm
http://www.jguru.com/faq/view.jsp?EID=9691

J'ai russi  afficher ces exemples, mais  chaque fois, ce sont des images de fond pour 1 JPanel. Or, mon appli est dcoupe est plusieurs panels. Quelle est la solution ? 
Dcouper l'image de fond selon chaque panel ? 
Crer un panel global qui contient tous les panels ? (je ne crois pas que a fonctionne a)

----------


## adiGuba

Salut,




> Crer un panel global qui contient tous les panels ? (je ne crois pas que a fonctionne a)


Tu peux trs bien faire cela !
Il faut juste utiliser *setOpaque(false)* sur les composants contenu  l'intrieur de ton JPanel, afin qu'il ne redessine pas leur propre background...


a++

----------


## uhrand

> Quelle est la solution?
> Crer un panel global qui contient tous les panels ? (je ne crois pas que a fonctionne a)


En effet, ce n'est pas toujours vident de rendre transparent tous les lments de la surface pour pouvoir voir l'image de fond. Tu peux essayer d'utiliser la classe BackgroundPanel qui fais une tentative de rendre transparent les composants qui sont ajouts au panel. Mais si tu ajoute par exemple une JTable, tu as dj un problme.

Comme alternative  l'image de fond, nous pouvons peindre une image semi transparente  l'avant plan, donc sur une couche en dessus de la surface gnrale. De cette faon on a l'impression que les lments de la surface son transparents et que l'image se trouve  l'arrire plan, alors qu'en ralit c'est l'inverse. Le dsavantage de cette conception est une mauvaise performance pour certaines surfaces complexes.

----------


## TekP@f

> Salut,
> 
> Tu peux trs bien faire cela !
> Il faut juste utiliser *setOpaque(false)* sur les composants contenu  l'intrieur de ton JPanel, afin qu'il ne redessine pas leur propre background...
> 
> 
> a++


J'ai justement essay de le faire. Voici mon code. J'ai un JPanel qui sert d'image de fond. Un autre qui contient des actions simples. Et j'ai toujours l'image de fond qui apparait par dessus le reste.



```

```

----------


## TekP@f

Je viens de regarder ton lien uhrand. J'ai pu me dbrouiller avec les indications et ce qu'a ditadiGuba. Belle quipe. Mon code qui fonctionne : 



```

```

----------


## adiGuba

Ton organisation est bizarre...
Tu as un JPanel qui contient une autre JPanel avec une image de fond (avec une taille fixe assez importante), puis d'autre composants  la suite.

Donc tu as un grand panel qui dessine son fond, puis beaucoup plus bas tes autres composants qui sont invisible car en dehors de la fentre !


Donc dj c'est ton panel principal qui doit dessiner le fond d'cran, et non pas un panel qui contient. En clair :


```
JPanel panFondEcran = new TestImagePanel(new ImageIcon("images/fond.png").getImage());
```


Ensuite ton panel doit uniquement se contenter de modifier sa mthode paintComponent(). Tu n'a pas  modifier sa taille ou son layout :


```

```


a++

PS : Tu peux remplacer tous les par *new ImageIcon(filename).getImage()* directement par  *Toolkit.getDefaultToolkit().getImage(filename)*  :;):

----------


## TekP@f

Merci pour ces explications. Je comprends mieux pourquoi a ne marchait pas avant.  ::):

----------

