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

Signaler
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
-
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
-
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

Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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);
}
}
}
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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);
}
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
merci bien

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

merci
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
je m'exuse jai trouvé :
	 Image image = Toolkit.getDefaultToolkit().getImage("images_icones/IMM.PNG");
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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.
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
Peux tu me montrer ton code ?
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
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
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
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)
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
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)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
HA oui, je n'avais pas fais attention à ce code mais les modifications que tu as apporté ne sont pas très heureuses...
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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 ?
Messages postés
211
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
15 mars 2013
7
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
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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)
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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.
Messages postés
6414
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
29 juillet 2020
302
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...
Messages postés
2116
Date d'inscription
samedi 8 novembre 2003
Statut
Contributeur
Dernière intervention
6 octobre 2012
10
Oulala !!!! c est du lourd la ;o) ...

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




GodConan ;o)