Image sur le fond d'un JDesctoPane

Résolu
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 - 5 sept. 2011 à 13:38
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 8 sept. 2011 à 13:43
bonjour

j'aimerai inserer une image sur le fond de mon jdesctopepane
meme si les internalframes s'ouvre l'image reste au fond

j'ai pas trouvé comment
merci

23 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
5 sept. 2011 à 13:46
Bonjour,

Tu peux surcharger la méthode paintComponent de DesktopPane

public class DesktopPaneImage extends JDesktopPane {

private static final long serialVersionUID = -6350324456764768311L;

private Image image;

public DesktopPaneImage(Image image) {
this.image = image;
}


@Override
public void paintComponent(Graphics g){
if(image!=null){
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
}
}
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
5 sept. 2011 à 13:47
Dans le code que je te propose, l'image est automatiquement redimensionnée pour s'adapter au contenu de ton JDesktopPane, si ce n'est pas ce que tu souhaites, tu peux remplacer la méthode paintComponent par celle ci :

@Override
public void paintComponent(Graphics g){
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
}
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
5 sept. 2011 à 14:11
merci bien

mais comment affecter mon image de l'extension .png a ce desctopepane

merci
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
5 sept. 2011 à 14:16
je m'exuse jai trouvé :
	 Image image = Toolkit.getDefaultToolkit().getImage("images_icones/IMM.PNG");
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
5 sept. 2011 à 14:24
un autre problème

l'image ne s'affiche au fond que lorsque j'ouvre un internaleframe contenu dans le desctopane et elle reste affiché meme si je le ferme
mais moi je veux que l'image s'affiche des que le jframe s'ouvre

merci
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
5 sept. 2011 à 14:26
A ta place, je créerais un nouveau dossier source dans lequel je refais l'arborescence des packages de ton dossier initial et dans la classe ou tu as besoin de ton image, tu tapes

ImageIO.read(getClass().getResource("IMM.PNG")


Ça te permettra de ne pas t'embêter avec les chemins et tu pourras exporter ton projet plus facilement.
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
5 sept. 2011 à 15:17
un autre problème

l'image ne s'affiche au fond que lorsque j'ouvre un internaleframe contenu dans le desctopane et elle reste affiché meme si je le ferme
mais moi je veux que l'image s'affiche des que le jframe s'ouvre et dans la totalité du destoppane

merci
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
5 sept. 2011 à 15:27
Peux tu me montrer ton code ?
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
5 sept. 2011 à 17:19
merci pour ton soutien
j' ai copié colle directement la classe que tu ma donné et j'ai ajouté qlq et voila :
class DesktopPaneImage extends JDesktopPane {

private static final long serialVersionUID = -6350324456764768311L;

private Image image;

public DesktopPaneImage(Image image) {
this.image = image;
}

//g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
@Override
public void paintComponent(Graphics g){
if(image!=null){
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.drawImage(image, 0, 0,getWidth(), getHeight(), null);
setOpaque(true);
repaint();
}
}
}

maitenant ca marché
merci
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 sept. 2011 à 18:22
salut,

malheureux enleve ce repaint() de ta methode paint ;o) ... faut jamais faire ca ;o)

Tu tag ton composent comme 'à rafraichir' alors que tu viens juste de le déssiner ;o) ...

GodConan ;o)
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
5 sept. 2011 à 18:22
scuse pour le double msg ;o)

de la même façon le setopaque ne doit pas se faire à ce niveau non plus ;o) ...

GodConan ;o)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
5 sept. 2011 à 23:01
HA oui, je n'avais pas fais attention à ce code mais les modifications que tu as apporté ne sont pas très heureuses...
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
5 sept. 2011 à 23:06
setopaque : je l'ai enlevé ca marché
mais quand j'enleve le repaint l'image ne s'affiche pas directement
elle ne s'affiche qu'apres ce que j'ouvre un e internalframe(que j'ai ajoute au desctopane)
donc
a votre avis quelle est la solution

merci bien
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 sept. 2011 à 10:02
Dans tous les cas, il faut que tu enlèves le repaint.

Je ne sais pas comment tu utilises le code que je t'ai donné mais en tout cas, sans mettre de repaint à l'intérieur, chez moi l'image s'affiche directement.

Peux tu nous donner le code dans lequel tu instancie le desktop ?
0
profiter Messages postés 205 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 15 mars 2013 8
6 sept. 2011 à 10:31
bonjour,
voila la partie du code :
public class my_ihm_2 extends JFrame {


 Image image = Toolkit.getDefaultToolkit().getImage("images_icones/IMM.PNG");
private final DesktopPaneImage desktopPane;

/**
 * Launch the application.
 */
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e){}
my_ihm_2 frame = new my_ihm_2();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
 * Create the frame.
 */
public my_ihm_2() {

desktopPane = new DesktopPaneImage(image);
desktopPane.setBounds(0, 23, 936, 519);
getContentPane().add(desktopPane);
// et la les autres choses ...................... 

merci
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 sept. 2011 à 10:52
Le code est horrible, et je pèse mes mots.

- Je ne vois pas l'intérêt de redéfinir une méthode run dans la méthode main

- les noms des classes, des instances ne respectent aucun formalisme.

- Tu fais des catch(Exception) qui ne servent à rien, les lignes :
my_ihm_2 frame = new my_ihm_2();
frame.setVisible(true);

ne lèveront jamais d'exception qui soient intéressante de catcher.

Que de maladresses en si peu de lignes.

Tu n'as pas fait de setLayout(null) avant d'ajouter ton desktopPane dans la fenêtre (tu devrais utiliser des layout d'ailleurs).

Tu dois ajouter quelque chose par dessus le JDesktopPane et je ne sais pas quoi, il faudrait que tu me montres la suite de ton code (j'ai un peu peur de ce que je vais découvrir)
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 sept. 2011 à 11:31
Tu as une ligne getContentPane().setLayout(null); essayes déjà de la supprimer (et ne conserves que la première setLayout(null). Je regarde la suite.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 sept. 2011 à 11:34
Ok, ce que je t'ai suggéré suffira peut être, en tout cas, je ne vois rien d'autre qui pourrait poser problème.

L'éditeur d'ihm que tu utilises te génères un code un peu pourri, il est donc difficile à relire. Il en existe qui sont plus propres.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
6 sept. 2011 à 11:35
je n'utilise pas des layouts pour faciliter le faite de placer les composants dans la fenetre librement


Je ne pense pas que se passer des Layout facilite le travail que tu fais...
0
cs_GodConan Messages postés 2113 Date d'inscription samedi 8 novembre 2003 Statut Contributeur Dernière intervention 6 octobre 2012 12
6 sept. 2011 à 19:11
Oulala !!!! c est du lourd la ;o) ...

Effasses tout et recommences ;o) ... Par pitié ;o) respectes les conventions d'écritures JAVA ;-(((




GodConan ;o)
0
Rejoignez-nous