# Java > Interfaces Graphiques en Java > AWT/Swing >  Swing - recharger l'image darrire plan d'une fenetre

## floflolyon

Bonjour, 

depuis quelques jours je suis sur un petit projet. dans cette application j'ai la possibilit d'ouvrir une fentre de paramtrage du logiciel en question, celui ci comporte un arrire plan (comme larrire plan bureau), et par le biais d'une combobox situe dans la fentre Paramtres, lorsqu'on slectionne un thme (arrire plan) je voudrais que celui ci se change instantanment (du moins, qu'il se change ds que l'on clique dessus son nom dans la combobox). 

Je suis encore semi-dbutant en java, donc je me perds un peu avec tous les exemples que j'ai pu trouver, et rien ne convient  la mthode que j'ai du employer pour mettre un fond d'cran  ma fentre. Dailleurs au passage, si quelqu'un a un moyen d'ajouter  un arrire plan (avec ou sans redimensionnement automatique) de manire simple (ce qui me parait faisable avec java mais je n'ai pas trouv pour le moment), ce serai trs apprci de me le donner avec un exemple de code.

Je vous envoi un bout de mon code ainsi que la fentre du rsultat pour m'assurer que vous compreniez mon problme plus aisment.






```

```

Merci davance pour votre aide.

----------


## floflolyon

Voici ce que j'obtient aprs avoir modifi mon code suivant le site que tu m'as conseill d'aller voir Devak.
Maintenant le souci est celui que j'ai dj rencontr  plusieurs reprise lorsque je cherchais a intgrer un arrire plan dans une JFrame ou une JWindow : je ne peux intgrer aucun autre lment  ma fentre, du moins je peux mais ils ne s'affichent pas.

vois plutt sur la photo ci-jointe :


voici mon code tel qu'il est  actuellement :



```

```

----------


## Vikisme

Bonjour,

Dj, pour rpondre  la question _"Ce code est-il propre ?"_ :
Si on ne se base que sur la forme, mme sans parler des indentations, il faut bien admettre qu'on est trs loin de la code convention java (cf. http://www.oracle.com/technetwork/ja...oc-136057.html) !
Aprs, pour le fond :
Si ta question est _"est-ce que c'est bien de redessiner l'image de fond en surchargeant la mthode paintComponent ?"_, la rponse est *oui*. Aprs, personnellement, j'aurais plutt garder un attribut *BufferedImage* que de le transformer en une *ImageIcon*. Mais bon, l'image est gre avec un tampon ce qui "optimise" le traitement et c'est ce qui compte.Aprs, pour ce qui est du code swing, c'est une question de point de vue. J'avoue avoir une prfrence pour une certaine organisation plutt que le "tout le code dans la mme mthode", mais avec les gnrateurs de code, on ne choisi pas forcment et si c'est pour tout refaire derrire il n'y a pas grand intrt.Autre point, je ne vois pas l'intrt d'avoir 2 composants identiques ? Pourquoi avoir 2 *PanneauBgImageXXX* ? Parce que l'image est diffrente ? Il vaut mieux en avoir un seul avec comme attribut l'image utilise !Pour la *ComboBox*, on prfrera trs largement utiliser un modle plutt que faire une boucle pour ajouter les lments, quitte  faire quelque chose comme a : 

```
backgrounds.setModel(new DefaultComboBoxModel(choix));
```

Ensuite, concernant le traitement, plutt que de multiplier les mthodes en fonction des couleurs, j'aurais plutt dfinit un attribut pour la couleur de fond, utilis par le panneau qui le dessine, en ralisant la mme chose indpendamment du choix et du nombre de choix surtout. S'il y a une image ou d'autres attributs associs  une couleur de fond, j'aurais plutt crer un objet  proprement dit dans lequel il y aurait tout, et la ComboBox aurait comme modle une liste de cet objet pour pouvoir assurer un traitement simple et clair derrire. (Je sais pas si je suis clair  ::P: )
Par rapport au second post, je ne sais pas ce qui a t dit, mais quoi qu'il en soit il est plus propre de redfinir la mthode paint d'un panel plutt que d'ajouter un *JLabel* pour faire office de fond (=> pas beau, pas lisible et surtout il n'y a aucune relle matrise du rsultat). Accessoirement, un *JLabel*, c'est du texte, avec ventuellement une image avec, dans un coin ou sur un ct. Il faut l'utiliser comme tel et pas forcment le dtourner. Ici tu l'ajoute en tant que composant principal de ta fentre. Sauf que le *JLabel* ne se comporte pas comme un conteneur donc tout ce que tu cherche  ajouter dedans par la suite, a ne fonctionne pas.

----------


## floflolyon

Tout d'abord je te remercie vraiment Vikisme d'avoir prter attention  mon problme, et te flicite pour ces explications trs claires, toutes les informations que tu m'as donn m'ont aid  comprendre un peu plus la chose.

Ceci dit, avant tout, je voudrais prciser une chose dont tu as parl dans ta rponse mais pour laquelle je pense que tu n'avais pas compris ma dmarche explicative : je m'explique, concernant l'affichage de mon code dans le post, en fait j'ai bel et bien plusieurs classes (ce n'est pas du tout en un  :;):  ) sauf que ici j'ai juste fais des petits paquet pour ne pas avoir a recopier toutes les classes. Ensuite, petite prcision, je n'ai utilis aucun gnrateur de code (si c'est de a dont tu voulais parler lorsque tu as cit ce mot) je dbut simplement dans le codage Java tout en ayant pas mal de petites bases par ci par la.
Autre chose, en fait je veux pas changer la couleur de mon arrire plan mais tout simplement changer l'image darrire plan par une autre, les couleur en fait ne correspondent qu'au nom que je leur ai donn. 

Concernant le fait du JLabel, d'accord, ceci explique cela, en fait quelqu'un du chat m'a envoy un lien ou se trouvait un code pour une autre mthode pour balancer une image en fond dcran, je la trouvais beaucoup plus simple que celle que j'utilisais et surtout elle avait l'air plus fonctionnelle donc je l'ai utilise pour mon code en remplaant mon ancien code de la mthode paint.

Par contre je n'ai pas trs bien saisie lhistoire du combobox, car  ce que j'ai fais est tout simplement une liste droulante qui propose des arrire plan, et lorsque l'on clique dessus un de ces lments, je veux faire en sorte que a charge l'image en question en arrire plan a la place de celui actuel.

----------


## floflolyon

Pour ceux ou celle que a intressent, mon souci venait du fait que les layout se mlangeaient, mon background tait en Flowlayout et je voulais mettre le panel en layout null. A priori a posait souci, les deux se feraient la guerre...

----------

