Inserer image

didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 15 août 2006 à 15:34
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 - 18 août 2006 à 21:46
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

tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
15 août 2006 à 15:53
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] -
0
cs_Umbre Messages postés 105 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 17 août 2006
15 août 2006 à 15:59
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...
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
15 août 2006 à 16:16
je vous remerci tt les deux.
pour le moment j'ai essayer la premiere methode qui ne semble pas donne grand chose.
++
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 16:46
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
0

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

Posez votre question
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
15 août 2006 à 18:03
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...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 18:14
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
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
15 août 2006 à 18:19
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++
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 18:25
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
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
15 août 2006 à 18:32
ouai la ya plus d'erreures mais je suis desoler y a toujours rien.
et franchement je voi pas ou ca peut bugger.
merci...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 18:54
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
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
15 août 2006 à 19:14
y a pas plus simple??? ou plutot plus cour ???

merci
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 19:33
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
0
didoux95 Messages postés 845 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 1 août 2017 2
15 août 2006 à 19:54
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
0
cs_Umbre Messages postés 105 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 17 août 2006
15 août 2006 à 19:56
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.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 19:58
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
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 20:03
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
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 août 2006 à 20:19
"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 !
0
cs_Umbre Messages postés 105 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 17 août 2006
15 août 2006 à 20:52
...
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...
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
15 août 2006 à 20:58
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
0
cs_Umbre Messages postés 105 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 17 août 2006
15 août 2006 à 21:02
Oki merci
0
Rejoignez-nous