Image sur le fond d'un JDesctoPane [Résolu]

profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 13:38 - Dernière réponse : cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

23 réponses

Meilleure réponse
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 sept. 2011 à 13:46
3
Merci
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);
}
}
}

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 sept. 2011 à 13:47
0
Merci
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);
}
Commenter la réponse de cs_Julien39
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 14:11
0
Merci
merci bien

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

merci
Commenter la réponse de profiter
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 14:16
0
Merci
je m'exuse jai trouvé :
	 Image image = Toolkit.getDefaultToolkit().getImage("images_icones/IMM.PNG");
Commenter la réponse de profiter
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 14:24
0
Merci
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
Commenter la réponse de profiter
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 sept. 2011 à 14:26
0
Merci
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.
Commenter la réponse de cs_Julien39
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 15:17
0
Merci
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
Commenter la réponse de profiter
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 sept. 2011 à 15:27
0
Merci
Peux tu me montrer ton code ?
Commenter la réponse de cs_Julien39
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 17:19
0
Merci
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
Commenter la réponse de profiter
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 5 sept. 2011 à 18:22
0
Merci
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)
Commenter la réponse de cs_GodConan
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 5 sept. 2011 à 18:22
0
Merci
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)
Commenter la réponse de cs_GodConan
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 5 sept. 2011 à 23:01
0
Merci
HA oui, je n'avais pas fais attention à ce code mais les modifications que tu as apporté ne sont pas très heureuses...
Commenter la réponse de cs_Julien39
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 5 sept. 2011 à 23:06
0
Merci
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
Commenter la réponse de profiter
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 6 sept. 2011 à 10:02
0
Merci
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 ?
Commenter la réponse de cs_Julien39
profiter 211 Messages postés mercredi 15 juin 2011Date d'inscription 15 mars 2013 Dernière intervention - 6 sept. 2011 à 10:31
0
Merci
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
Commenter la réponse de profiter
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 6 sept. 2011 à 10:52
0
Merci
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)
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 6 sept. 2011 à 11:31
0
Merci
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.
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 6 sept. 2011 à 11:34
0
Merci
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.
Commenter la réponse de cs_Julien39
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 6 sept. 2011 à 11:35
0
Merci
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...
Commenter la réponse de cs_Julien39
cs_GodConan 2116 Messages postés samedi 8 novembre 2003Date d'inscriptionContributeurStatut 6 octobre 2012 Dernière intervention - 6 sept. 2011 à 19:11
0
Merci
Oulala !!!! c est du lourd la ;o) ...

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




GodConan ;o)
Commenter la réponse de cs_GodConan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.