# Java > Interfaces Graphiques en Java > AWT/Swing >  comment afficher une image dans un jpanel ?

## 180degrs

Bonjour,
Dans la faq, je n'ai trouv que de quoi accder  une une image et pas comment on peut l'afficher dans un jpanel (je dbute en java). Pourriez vous m'aider ?
voici mon code :


```

```

le problme c'est que je ne sais pas quoi mettre ensuite.

----------


## 180degrs

j'ai rajout ceci  la suite :

MonPanel jPanelImage = new MonPanel(image);

en ayant cr dans un fichier a part la classe "MonPanel" :



```

```

mais le compilo me met cette erreur :

Compiling 1 source file to D:\licence L3 info\cour information et multimdia\projet1 Sbastien Champmartin\projet1\build\classes
D:\licence L3 info\cour information et multimdia\projet1 Sbastien Champmartin\projet1\src\projet1\JFrameMainP1.java:133: cannot find symbol
symbol  : constructor MonPanel(java.awt.Image)
location: class projet1.MonPanel
        MonPanel jPanelImage = new MonPanel(image);
1 error
BUILD FAILED (total time: 1 second)

----------


## Janitrix

Bin tu as en gros deux methodes (enfin, j'en connais deux  :;):  ).
Sois tu as une JFrame avec une instance de JPanel sous la main, dans ce cas, tu cres une ImageIcon , l'ajoute a un JLabel, et ajoute enfin ce dernier a ton JPanel, comme ceci 

```

```

Sois, tu as une classe qui tend JPanel, dans ce cas tu surcharges la methode paint de cette classe, comme cela 

```

```

La deuxieme methode je suis pas sur, je fais de tete, mais en gros c'est a. Je n'ai pas approfondis le sujet, il doit y avoir d'autres methodes.
Bonne chance

----------


## 180degrs

merci, j'ai remplac la classe par a : 



```

```

je suppose que je dois appeler paint dans le programme principal ? mais en ayant initialis "g"  quoi ?

----------


## Janitrix

Normalement, tu n'as pas a appel paint, il est appel automatiquement quand tu affiche ton JPanel. Donc pas d'objet Graphics a initialis !
Attention a ceci 

```

```

L'image n'apparaitra pas, il me semble, car tu as spcifi une largeur/longueur de 0 pixel, donc une zone invisible...
Si tu as ton gif sous la main, et que tu es sous win (j'ai pas encore migr sous *NIX, je sais pas lequel choisir  ::aie::  ), vas dans les proprites de ton gif et regardes sa longueur/largeur, reporte ensuite ces donnes dans ta methode paint.
Toute fois, paint est une methode brut, c'est a dire que cela affichera dans ton JPAnel le contenu de paint en premier lieu, donc si tu as ajout des composants graphiques (bouton, label, textfield, etc), tu risques d'avoir des problemes d'affichage. Dans ce cas o ton JPanel contient d'autre lments graphiques, prfre la solution de l'ImageIcon/JLabel.
Bonne chance  :;):

----------


## 180degrs

ok je poste mes modifications :
mthode qui se dclenche quand on clique sur un bouton:



```

```

la classe monPanel:



```

```

----------


## Janitrix

Tu veux que l'image s'affiche quand on clique sur un bouton ?
Et bien dj,  la place de MouseListene, je te conseille ActionListener, qui est toute faite pour ce genre d'coute.
Ensuite, je ne vois pas comment faire pour ajouter une image quand on clique sur un bouton, avec la methode paint. Donc voii comment faire, avec le couple ImageIcon/JLabel.

```

```

Cette mthode est assez barbare, car elle recrer le JLabel a chaque fois que tu clique sur le bouton, et ajoute a chaque fois au JPanel l'image. Je ne crois pas que tu auras 5000 images a force de cliquez, car il me semble que une meme instance d'un composant ne peut pas etre "dupliquer" dans un JPanel, la nouvelle remplacera donc la dernier.
Autre methode, plus conventionnel

```

```

Inconvnient de la seconde mthode, si tu ne clique jamais au cours du programme sur le bouton, tu auras de la mmoire occup inutilement tout au long de ton programme. (A moins que le gc le vide, mais la je sais pas).
Voila bonne chance...
P.S = Si tu veux utilis la mthode paint, je te conseille d'allez faire un tour sur les tutorials de sun, sur java.sun.com.

----------


## sinok

Sinon vite d'utiliser ToolKit.getDefaultToolkit().getImage(url), car celle ci ne rique de na pas charger correctement ton image

Prfre lui l'utilisation de 


```
ImageIO.read(url)
```

----------

