Image de Fond JFrame

Fermé
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 - 9 juin 2013 à 17:16
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 - 9 juin 2013 à 19:43
Bonjour,


pour ajouter une image de fond à ma classe JFrame j'ai trouver en cherchant au net ce code:

package packTest;

import java.awt.*;

import javax.swing.JButton;
import javax.swing.JPanel;

import com.sun.media.sound.Toolkit;

public class ImagePanel extends JPanel {

public Image image;
BorderLayout bl1= new BorderLayout();

public ImagePanel(){

image=java.awt.Toolkit.getDefaultToolkit().getImage("Hydrangeas.jpg");

try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}

}

public void paintComponent(Graphics g)
{
super.paintComponent(g);

int imageWight = image.getWidth(this);
int imageHeight = image.getHeight(this);

g.drawImage (image, 0, 0, null);
repaint();
}

private void jbInit() throws Exception
{
this.setLayout(bl1);
}
}

Mais je veux l'intégrer dans ma classe JFrame et je ne sais pas comment.
voilà ma classe:


package packTest;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class TestImage extends JFrame {

private JPanel contentPane;

/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TestImage frame = new TestImage();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public TestImage() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
}

}


A voir également:

1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
9 juin 2013 à 18:43
Voici comment tu pourrais faire :

package packTest;

import java.awt.Container;
import java.awt.Graphics;
import java.awt.Image;

public class BackgroundContainer extends Container
{
    private static final long serialVersionUID = 1;

    private final Image img;
    private final int width;
    private final int height;

    public BackgroundContainer(Image background)
    {
        img = background;
        width = img.getWidth(this);
        height = img.getHeight(this);
    }

    @Override
    public void paint(Graphics g)
    {
        super.paint(g);
        g.drawImage(img, 0, 0, width, height, this);
        super.paintComponents(g);
    }
}

package packTest;

import javax.swing.ImageIcon;
import javax.swing.JFrame; 

public class TestImage extends JFrame
{
    private static final long serialVersionUID = 1;

    private final static ImageIcon background = new ImageIcon("Hydrangeas.jpg");

    public TestImage()
    {
        setContentPane(new BackgroundContainer(background.getImage()));
        setBounds(100, 100, 450, 300);
        setLayout(null);

        // Ajout des composants de la fenêtre

        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args)
    { 
        new TestImage(); 
    }
}
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
Modifié par elkadiri.wd le 9/06/2013 à 19:07
ça n'a pas marché :( sachant que l'image se trouve dans le même package .
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
9 juin 2013 à 19:35
La localisation des images est très importantes, tu ne peux pas mettre l'image n'importe où, car il faut que la localisation indiquée dans le code source corresponde à la localisation réelle de la ressource.

Par défaut tu devrais avoir une hiérarchie comme ceci :

\
\packTest\
\packTest\BackgroundContainer.java
\packTest\BackgroundContainer.class
\packTest\TestImage.java
\packTest\TestImage.class

Alors si tu as mis ton image dans le dossier \packTest\Hydrangeas.jpg alors dans le code tu dois avoir new ImageIcon("packTest/Hydrangeas.jpg");

Remarque : ici je parle de la localisation des ressources par défaut (en ligne de commande), si tu utilises une configuration plus complexe, par exemple avec Eclipse, la localisation de tes ressources dépendra de ton classpath. Tu auras d'ailleurs en général tes fichiers .java dans un autre dossier que tes fichiers .class. Pour ce genre de considérations il vaut mieux ne pas mettre tes images dans le dossier de ton package, mais plutôt dans un répertoire spécifique où tu mettras toutes tes images.

Sous Eclipse tu aurais une hiérarchie comme ceci :

\
\src\
\src\packTest\
\src\packTest\BackgroundContainer.java
\src\packTest\TestImage.java
\bin\
\bin\packTest\BackgroundContainer.class
\bin\packTest\TestImage.class
\img\
\img\Hydrangeas.jpg

Avec dans le code : new ImageIcon("img/Hydrangeas.jpg");
0
elkadiri.wd Messages postés 127 Date d'inscription dimanche 24 mars 2013 Statut Membre Dernière intervention 31 mai 2015 1
9 juin 2013 à 19:43
oh génial merci beaucoup moi je programme sous eclipse ça a été bien marché :)
0