IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Afficher une Image dans un JLabel


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Par défaut Afficher une Image dans un JLabel
    Bonjour,

    Introduction:
    J'ai vu sur internet que ce sujet était abordé de nobmreuse fois mais AUCUN ne correspondaient à mon sujet précis.

    Présentation:
    Alors voila je souhaite créer une classe (ici nommée "image.java") qui contiendra une méthode me permettant d'afficher des images à l'endroit ou je veux.(Pour dans le futur l'utiliser pour un jeux mais ce n'est pas vraiment important mtn.)

    Problème:
    Mon code ne compile apparement sans erreur mais mon image ne s'affiche pas.Pourquoi?

    Code:

    Voici ma classe "Main.java"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package imageTest;
     
    import java.awt.Dimension;
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
    public class Main extends JPanel {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		JFrame fenPrincipale=new JFrame("-ProjetNfa032-");//On definit la JFrame //fen=fenetre
            fenPrincipale.setSize(new Dimension(750,500));
            fenPrincipale.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            Image imgTest= new Image();
            imgTest.adresseImg="C:\\Users\\antoine\\Desktop\\imgGalaxy.jpg";
            JPanel panImgTest = null;
            imgTest.fctAfficherImg(panImgTest, 0, 0);
     
            fenPrincipale.setVisible(true);
     
    	}
     
    }
    Et voici ma classe "Image.java"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    package imageTest;
     
    import java.io.IOException;
     
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    public class Image extends JPanel{
     
    	String adresseImg;
     
    	public JPanel fctAfficherImg(JPanel pan ,int posX ,int posY){
    		pan=new JPanel();//
    		Icon imgIcon=new ImageIcon(adresseImg);
     
    		JLabel imgJLabel = new JLabel ();//
    		imgJLabel.setIcon(imgIcon);
     
    		pan.setLayout(null);//positionement-mise en forme du JPanel
    		try {
    			pan.setBounds(posX,posY,ImageUtil.getImageHeight(adresseImg),ImageUtil.getImageWidth(adresseImg));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    		pan.add(imgJLabel);
     
    		return pan;
    	}
     
    }
    D'avance merci de votre aide la je suis vraiment bloqué.

    EDIT1eut etre ceci vient il de ma volonté de placer "en position absolu" mon JPanel?Mais j'en ai ABSOLUMEN BESOIN ! pour la suite.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    A priori, je dirais que l'erreur arrive dans ,ImageUtil.getImageHeight(adresseImg) ou/et ImageUtil.getImageWidth(adresseImg) (quand on a une erreur, c'est mieux de nous montrer la stacktrace complète). Peut-on voir le code de ces méthodes ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre éclairé
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Par défaut Reponse Joel Drigo
    Ces 2methodes viennent d'une "class" fournies par le prof.Elles permettent de retourner la hauteur et la largeur de l'image passée ne paramètre.

    *)
    Voici le code des 2méthodes concernées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    static int getImageWidth(String fnam) throws IOException{
        BufferedImage bufi = ImageIO.read(new File(fnam));
        return bufi.getWidth();
      }
      static int getImageHeight(String fnam) throws IOException{
        BufferedImage bufi = ImageIO.read(new File(fnam));
        return bufi.getHeight();
      }
    *)
    Voila le code de toutes la classeau cas ou)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    public class ImageUtil{
      static int[] readImage(String fnam) throws IOException{
        int[] tab;
        BufferedImage bufi = ImageIO.read(new File(fnam));
        int width = bufi.getWidth();
        tab = bufi.getRGB(
                          0,
                          0,width,bufi.getHeight(),null,
                          0,
                          width);
        return tab;
      }
      static int getImageWidth(String fnam) throws IOException{
        BufferedImage bufi = ImageIO.read(new File(fnam));
        return bufi.getWidth();
      }
      static int getImageHeight(String fnam) throws IOException{
        BufferedImage bufi = ImageIO.read(new File(fnam));
        return bufi.getHeight();
      }
      static int[] explodePixel(int pix){
        int[] pt = new int[4];
        pt[0]= pix >> 24 & 0x000000FF;
        pt[1]= pix >> 16 & 0x000000FF;
        pt[2]= pix >> 8 & 0x000000FF;
        pt[3]= pix & 0x000000FF;
        return pt;
      }
      static int computePixel(int a, int r, int g, int b){
        return (((((a <<8)+ r) << 8) + g) <<8) + b;
      }
      static int computePixel(int[] pt){
        return (((((pt[0] <<8)+ pt[1]) << 8) + pt[2]) <<8) + pt[3];
      }
      static int alphaFromPix(int pix){
        return pix >> 24 & 0x000000FF;
      }
      static int redFromPix(int pix){
        return pix >> 16 & 0x000000FF;
      }
      static int greenFromPix(int pix){
        return pix >> 8 & 0x000000FF;
      }
      static int blueFromPix(int pix){
        return pix & 0x000000FF;
      }
    }

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Super, on charge 2 fois l'image en entier pour connaitre sa taille

    Et la stacktrace ? Elle est où ? Je ne peux deviner que l"erreur vient bien de l'appel de ces méthodes, et qu'elle est dû au fait que le fichier n'est pas trouvé.

    Tu es sûr de ton path ? Ce serait pas plutôt "C:\\Users\\antoine\\Pictures\\Desktopimg\\Galaxy.jpg"
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre éclairé
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Par défaut
    Re Salut,

    *)
    Super, on charge 2 fois l'image en entier pour connaitre sa taille
    Eh alors?Désolé je ne comprends pas ou est le problème,je ne suis qu'un débutant et je trouve ça plus rigoureux.

    *)
    Et la stacktrace ? Elle est où ? Je ne peux deviner que l"erreur vient bien de l'appel de ces méthodes, et qu'elle est dû au fait que le fichier n'est pas trouvé.
    Gné?Qu'est ce que le "strackTrace"

    *)
    Tu es sûr de ton path
    Oui je suis sur de mon path d'ailleurs si l'ordi ne le trouvé pas il me renverrait une erreur comme il l'a déjà fait non?

    En tout cas un grand merci à toi.

    EDIT1:Oui tu as raison dans mon code l'adresse de l'image est:"C:\\Users\\antoine\\Desktop\\imgGalaxy.jpg" j'ai du faire une erreur dans le copier coller dsl :/Je viens de corriger.

  6. #6
    Membre éclairé
    Homme Profil pro
    :-)
    Inscrit en
    Mars 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : :-)
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2014
    Messages : 194
    Par défaut Presque solution
    Bonjour,

    *)
    Maintenant j'en suis persuadé le problème vient de "set bounds" en effet ce code marche parfaitement.
    Cependant et je le reprécise j'ai ABSOLUMENT besoin de pouvoir positionner mais images en "absolu" pas en "relatif".

    *)
    classe "image.java":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Image extends JPanel{
     
    	String adresseImg;
     
    	public JPanel fctAfficherImg(JPanel pan ,int posX ,int posY){
     
    		pan=new JPanel();//
    		Icon imgIcon=new ImageIcon(adresseImg);
     
    		JLabel imgJLabel = new JLabel ();//
    		imgJLabel.setIcon(imgIcon);
     
    		/*Pour faire le test
                    pan.setLayout(null);//positionement-mise en forme du JPanel
    		try {
    			pan.setBounds(posX,posY,ImageUtil.getImageHeight(adresseImg),ImageUtil.getImageWidth(adresseImg));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}*/
     
    		pan.add(imgJLabel,BorderLayout.CENTER);
     
    		return pan;
    	}
     
    }
    EDIT1:
    Je précise que mon code à légérement changé depuis le début essai personnel je poste donc aussi ma classe main actuelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Main extends JPanel {
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
    		JFrame fenPrincipale=new JFrame("-ProjetNfa032-");//On definit la JFrame //fen=fenetre
            fenPrincipale.setSize(new Dimension(750,500));
            fenPrincipale.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
            Image imgTest= new Image();
            imgTest.adresseImg="C:\\Users\\antoine\\Desktop\\imgGalaxy.jpg";
            JPanel panImgTest = null;
            panImgTest=imgTest.fctAfficherImg(panImgTest, 0, 0);
     
            fenPrincipale.add(panImgTest);
            fenPrincipale.setVisible(true);
     
    	}
     
    }

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Pif_Paf_Pouf Voir le message
    Re Salut,

    *)

    Eh alors?Désolé je ne comprends pas ou est le problème,je ne suis qu'un débutant et je trouve ça plus rigoureux.
    Plus rigoureux de faire 2 fois la même chose : je dirais plutôt 2 fois plus long moi. Là, si tu charges des petites images locales, ça va pas changer grand chose c'est sûr. Mais sur le principe, si tu as beaucoup d'images à charger à distance de poids conséquent chacune, ça pourrait pourrir les perfs : pour peu que tu les appels dans le thread graphique et souvent (ce que font la plupart des débutants), et tu vas avoir des blocages de ton ui (saccade, lag...).



    *)

    Gné?Qu'est ce que le "strackTrace"
    Ici, dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
    			pan.setBounds(posX,posY,ImageUtil.getImageHeight(adresseImg),ImageUtil.getImageWidth(adresseImg));
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    Tu as mis un appel à la méthode printStackTRace() qui affiche la stack trace de l'exception : donc c'est le truc qui s'affiche lorsqu'il y a une exception, complet.


    *)
    Oui je suis sur de mon path d'ailleurs si l'ordi ne le trouvé pas il me renverrait une erreur comme il l'a déjà fait non?
    Tu as justement une erreur...


    En tout cas un grand merci à toi.

    EDIT1:Oui tu as raison dans mon code l'adresse de l'image est:"C:\\Users\\antoine\\Desktop\\imgGalaxy.jpg" j'ai du faire une erreur dans le copier coller dsl :/Je viens de corriger.
    Donc maintenant tu n'as pu cette exception et plus de stack trace qui s'affiche.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher une image dans un JLabel depuis une URL
    Par Morby dans le forum Débuter
    Réponses: 13
    Dernier message: 14/01/2012, 10h37
  2. Afficher une image dans un JLabel
    Par asoka13 dans le forum Applets
    Réponses: 4
    Dernier message: 07/11/2009, 02h05
  3. Afficher une image dans un état
    Par Invité1 dans le forum IHM
    Réponses: 8
    Dernier message: 23/09/2009, 14h59
  4. Afficher une image dans un état
    Par louis_figos dans le forum IHM
    Réponses: 5
    Dernier message: 09/03/2006, 11h09
  5. Besoin d'aide pour afficher une image dans un applet
    Par argon dans le forum AWT/Swing
    Réponses: 16
    Dernier message: 19/01/2006, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo