Inserer image

Signaler
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
-
bonjour


j'aimerais savoir comment inserer une image dans l'interface graphique d'un programme


je sais que c'est possible, j'ai deja vu ca quelque part mais je ne sais pas comment.


merci .

21 réponses

Messages postés
194
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
48
Bonjour,
le plus simple est d'utiliser un JLabel (un composant pour afficher du texte normalement) et de lui mettre une icone (qui serait ton image). Voici le code :

JLabel monImg=new JLabel(new ImageIcon("gfx/image.gif"));

C'est tout!! Tu n'as plus qu'a inserer monImg dans ton panel ou frame.

Va voir les docs :ImageIconet JLabel

- [TucoBouch] -
Messages postés
105
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
17 août 2006

BonjourJe crois qu'il faut utiliser la librairie awt.
Les classes java.awt.Graphics ou java.awt.Graphics2D
Voir la méthode drawImage de chacune de ces classes
Par contre je ne l'ai jamais utiliser encore alors pour plus de détail...
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
je vous remerci tt les deux.
pour le moment j'ai essayer la premiere methode qui ne semble pas donne grand chose.
++
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

ton image tu veux la mettre en image de fond ? si oui cherche dans les sources du site il y a tout ce que tu veux

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
j'ai trouver plein de truc comme:
" private Image bg=Toolkit.getDefaultToolkit().getImage("image.gif");



    public void paint(Graphics g) {
                g.drawImage(bg,0,0,null);
    }"



mais quand je lance l'application, il n'y a aucune image!
quest ce que je dois faire??
merci...
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

c'est pour de l'awt ton code et toi à ce que j'en vois dans tes postes tu es en swing donc remplace le code par

private Image bg=Toolkit.getDefaultToolkit().getImage("image.gif");    
......

public void paintComponent(Graphics g) {
    if(bg != null){//petit test pour eviter les exceptions
       //optionnel mais ca evite les bugs d'affichage
       g.setColor(getBackground());
       g.fillRect(0, 0, getWidht(), getHeight());
       //tu dessine l'image
       g.drawImage(bg, 0, 0, this);//pas besoin de mettre null
    }
    super.paintComponents(g);//super imortant si tu es dans un JPanel sinon tu ne verra pas les composants contenu dedans
}

pour l'explication dis toi simplement qu'en awt on dessine dans paint et en swing dans paintComponent

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
ok je te remerci mais il y a une autre erreure c'est que le pc ne reconnais pas la methode :
g.fillRect(0, 0, getWidht(), getHeight());

merci++
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
erf faute de frappe c'est getWidth()  (tu aurais pu le corriger toi meme ..... feignant va )

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
ouai la ya plus d'erreures mais je suis desoler y a toujours rien.
et franchement je voi pas ou ca peut bugger.
merci...
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Lol,

pourtant il n'y a rien de plus simple

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

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

public class Test extends JFrame{

    public Test(){
        setDefaultCloseOperation(3);
        setSize(300, 300);
        setLocationRelativeTo(null);
        Background bg = new Background("img.png");
        bg.add(new JButton("Test"));
        setContentPane(bg);
       
    }
   
    public static void main(String [] args){
        new Test().setVisible(true);
    }
}

class Background extends JPanel{
    private static final long    serialVersionUID    = 7058591096486123469L;
   
    private Image img = null;
   
    public Background(String image){
        img = getToolkit().createImage(image);
    }
   
    public void paintComponent(Graphics g) {
        if(img != null){//petit test pour eviter les exceptions
           //optionnel mais ca evite les bugs d'affichage
           g.setColor(getBackground());
           g.fillRect(0, 0, getWidth(), getHeight());
           //tu dessine l'image
           //on cetre l'image
           int w = img.getWidth(this);
           int h = img.getHeight(this);
           g.drawImage(img, (getWidth() - w) / 2, (getHeight() - h) / 2, this);
        }
        super.paintComponents(g);//super important si tu es dans un JPanel sinon tu ne verra pas les composants contenu dedans
    }
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
y a pas plus simple??? ou plutot plus cour ???

merci
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Et tu veux pas 100 mars et 1 ?

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
845
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
1 août 2017
2
ce que je voulais dire c'est n'y a til pas une methode plus simple du genre 3 clik (sous JBuilder)??
mais si ce n'est pas le cas je prend ta methode. merci
Messages postés
105
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
17 août 2006

Voui ca a l'air de marcher sauf que je ne vois pas a quoi sert le bouton mais bon... A moins que ca ne soit pour illustrer le terme background...

Mais pour rajouter une autre image par dessus une autre (avec l'intention de la faire déplacer par la suite mais ca je verrai plus tard) je ne pense pas que je puisse utiliser cette méthode. Quoi que...

Sauf erreur si je bidouille un peu la classe Background que tu as faites je devrais pouvoir m'en sortir... Le principe est toujours le même.

Seulement, je vais être obliger de redessinner l'ensemble à chaque mouvement. Existe-t-il une autre façon de faire ?

Merci en tout cas.
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

Je ne suis pas sous jbuilder, mais cela ne tiens qu'à toi d'en faire un composant à rajouter dans la toolbar de jbuilder mais la c'est pas en si peu de lignes de codes que tu le feras.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

"

Voui ca a l'air de marcher sauf que je ne vois pas a quoi sert le bouton mais bon"

le bouton est juste la pour montrer que tu peux quand meme rajouter un composant. tout comme la classe Test ne sert à rien d'autre que pour l'exemple

"Mais pour rajouter une autre image par dessus une autre"

oui tu peux le faire sans problemes

"Seulement, je vais être obliger de redessinner l'ensemble à chaque mouvement. Existe-t-il une autre façon de faire ?"

enfaite nan tu peux utiliser la methode repaint(Rectangle) et redessinant la nouvelle position et l'ancienne.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
133
"n'y a til pas une methode plus simple du genre 3 clik (sous JBuilder)??"

Rah là là, tu ferais pas du VB toi par hasard ?

Sinon, je trouve la méthode de Twinuts très bien pour le SWING, mais perso, je préfère laisser les contrôles faire le boulot qu'ils sont censés faire en utilisant la méthode de tucobouch qui marche très bien, MAIS il faut que l'image soit dans le jar ou le dossier de l'application, forcément !
Messages postés
105
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
17 août 2006

...
public class Fenetre extends JFrame{
...
    public void move()
    {
        for(int i=0;i<50;i++)
        {
          bg.setCoord(0,0,i,i);
          repaint();
        }
    }
...
}

class Background extends JPanel{
...   
    private Image img1, img2 = null;
    
    private int x1=0 ,y1=0 ,x2=0 ,y2=0;
    
    public void setCoord(int x1, int y1, int x2, int y2)
    {
      this.x1=x1;
      this.y1=y1;
      this.x2=x2;
      this.y2=y2;
    }
...
}

Quelque chose dans ce genre la ?
J'ai changer pour afficher 2 images à partire des 2 couple (x,y)
L'affichage se fait bien pour deux images pas de probleme mais j'ai du mal pour le déplacement. Soit il m'affiche le rultat pres déplacement soit (avec le code si dessus) il ne bouge pas du tout... pourtant je ne vois pas vraiment d'erreur...
Elle restent danslecoin supérieur gauche tout le temps...

Quand tu dis repaint(Rectangle)  c'est le rectangle ou on repaint ou autre chose ? J'ai vu qu'on pouvais faire sans rectangle mais visiblement ca marche pas trop...
Messages postés
5366
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
6 décembre 2021
111
Salut,

pour ton histoire de dessin d'images mattes les sources dans le site il y a pleins d'exemple.

pour le rectangle repaint() va repaindre tout le composant meme les zones qui non pas bougé, tandisque que repain(rectangle) te perme de redessiner seulement une zone

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
Messages postés
105
Date d'inscription
jeudi 29 mai 2003
Statut
Membre
Dernière intervention
17 août 2006

Oki merci