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

AWT/Swing Java Discussion :

Charger Image dans un jPanel


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut Charger Image dans un jPanel
    Bonjour,

    S'il vous plaît, je veux afficher une image dans un jPanel suite à un clique sur un bouton.

    J'ai effectué des recherches dans ce forum et sur google, mais à chaque fois que je teste un code, ça ne marche pas.

    voilà le code dernièrement tester (il ne génére pas erreur mais il n'affiche pas l'image)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        JLabel jLabel4 = new JLabel();
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setIcon(new javax.swing.ImageIcon("C:/Users/Sisiniya/Documents/NetBeansProjects/GestionnaireEmployes/images/images/perso.jpg"));
        jLabel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jLabel4.setLayout(new java.awt.GridBagLayout());
        jPanel3.add(jLabel4);
    }
    je signale que je travaille avec Netbeans.

    Merci pour vos aides.
    Sisiniya.

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Pourquoi fais tu un setLayout sur ton JLabel?

    Ca n'a pas de sens...

  3. #3
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    j'ai éliminé le setLayout, vous avez raison .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JLabel jLabel4 = new JLabel();
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel4.setIcon(new javax.swing.ImageIcon("C:/Users/Sisiniya/Documents/NetBeansProjects/GestionnaireEmployes/images/images/perso.jpg"));
        jLabel4.setBorder(javax.swing.BorderFactory.createEtchedBorder());
    il ne génére aucune exception, mais il n'affiche pas l'image

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 343
    Par défaut
    Bonjour,

    il faut indiquer au processus que l'affichage est périmé. Il faut donc forcer un réaffichage du nouvel ensemble de composants en utilisant monComposant.Invalidate();

    @ bientôt...

  5. #5
    Membre confirmé Avatar de sisiniya
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Merci le problème est résolu, mais j'ai encore un souci !!

    je veux lister un ensemble d'image des personnes dont le chemin de chacune est stocké dans un fichier. Franchement je ne sais pas coment procéder ? est ce que je dois mettre un JPanel qui va englober tous mes label, et chaque label contient une image ? ou autre solution ?

    Merci pour vos aides.

    Sisiniya.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Alimentation

    Informations forums :
    Inscription : Avril 2011
    Messages : 7
    Par défaut
    Pourquoi faire ça avec un JLabel alors qu'on peut afficher directement l'image en arrière plan du JPanel?

    Voici comment :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import java.awt.Dimension;
     
    @SuppressWarnings("serial")
    public class ImagePanel extends JPanel
    {
    	private Image img;
    	private ImageIcon icon;
     
     
    	public ImagePanel(ImageIcon img) {
    		loadImageProperties(img.getImage());
    		icon = img;
    	}
     
    	public ImagePanel(){
     
    	}
     
    	public ImagePanel(Image img){
    		loadImageProperties(img);
    	}
     
    	public void setImageIcon(ImageIcon img){
    		icon = img;
    	}
     
    	public ImageIcon getImageIcon(){
    		return icon;
    	}
     
    	public void setImage(String imagePath){
    		icon = new ImageIcon(ElementsUtil.getResource(imagePath));
    		img = icon.getImage();
    		Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    		setLayout(new GridBagLayout());
    		setPreferredSize(size);
    		setMinimumSize(size);
    		setMaximumSize(size);
    		setSize(size);
    	}
     
    	/**
             * Loads the images properties like dimensions and size
             */
    	public void loadImageProperties(Image img){
    		this.img = img;
    		Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
    		setLayout(new GridBagLayout());
    		setPreferredSize(size);
    		setMinimumSize(size);
    		setMaximumSize(size);
    		setSize(size);
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(img, 0, 0, null);
    	}
    }
    Il y a deux faiblesses à utiliser un JLabel pour mettre l'image dans ton JPanel:
    1- Si tu désire mettre d'autres composants "par dessus" ton image(s'en servir comme arrière-plan), tu ne pourras pas dans un JPanel en utilisant un JLabel pour dessiner l'image. Tu pourrais le faire dans dans un JLayeredPane, mais là tu vas avoir des problèmes de redimensionnement des composants si ton JFrame est redimensionné.
    2- C'est un composant de plus dans ton application. Ça a l'air anodin, mais pour que ton app Swing soit optimisée, il faut qu'il y a le moins de composants inutiles possible, plus il y en a, plus elle sera lente.

Discussions similaires

  1. Image dans un Jpanel
    Par fontaigo dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/04/2006, 18h13
  2. comment afficher une image dans un jpanel ?
    Par 180degrés dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 18/04/2006, 15h33
  3. Persistance d'une image dans un JPanel
    Par Robiwan59 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 15/02/2006, 19h20
  4. Rafraichir image dans un jPanel
    Par kentao dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/01/2006, 16h31
  5. [JPanel]Mettre une image dans un JPanel
    Par ehmppowa dans le forum Composants
    Réponses: 11
    Dernier message: 30/11/2005, 20h17

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