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 :

Inserer une image dans un JPanel


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut Inserer une image dans un JPanel
    Je sais qu'il y a beaucoup de discussions sur ce sujet mais je n'arrive toujours pas à regler mon problème. J'ai une classe Fenetre extends JFrame qui contient plusieurs JPanel définits dans différentes classes.
    Voici le code de la classe Centre:
    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
     
    public class Centre extends JPanel{
    	public Centre(){
    		this.setLayout(new BorderLayout());
     
    		JPanel donnees = new JPanel();
    		JPanel resultat = new JPanel();
    		JPanel messages = new JPanel();
    		JLabel test = new JLabel("test");
    		donnees.add(test);
    		JPanel logo = new JPanel();
    		logo.setLayout(new BorderLayout());
    		JLabel image = new JLabel(new ImageIcon("logo.png"));
    		logo.setOpaque(false);
    		logo.add(image,BorderLayout.CENTER);
     
    		messages.setOpaque(false);
    		resultat.setOpaque(false);
     
    		JPanel bas = new JPanel();
    		JPanel gauche = new JPanel();
     
    		bas.setLayout(new BorderLayout());
    		gauche.setLayout(new BorderLayout());
     
    		gauche.add(resultat,BorderLayout.NORTH);
    		gauche.add(messages,BorderLayout.SOUTH);
    		gauche.setOpaque(false);
    		logo.setOpaque(false);
    		bas.add(gauche,BorderLayout.WEST);
    		bas.add(logo,BorderLayout.EAST);
    		bas.setOpaque(false);
    		donnees.setOpaque(false);
    		this.add(bas,BorderLayout.SOUTH);
    		this.add(donnees,BorderLayout.NORTH);
     
    		this.setVisible(true);
    	}
     
    }

    Voici le résultat de l'exécution:

    Nom : 13.png
Affichages : 1700
Taille : 5,4 Ko

    Et voici ce que je voudrais:

    Nom : 14.png
Affichages : 1716
Taille : 29,5 Ko

    Merci de votre aide.

  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,

    Déjà, tu ne nous montres pas tout le code, donc on ne pourra pas de répondre au sujet de l'interface entière. Cependant, pour le haut, il semblerait que tu cherches à faire plutôt un menu qu'une série de bouton, donc plutôt regarder du côté des classes JMenuBar, JMenu, JMenuItem. Inutile d'utiliser un layout spéciale, c'est la JFrame qui portera directement le menu qui s'en occupera. Du coup, tu peux te concentrer uniquement sur le contenu de la fenêtre (ce qui doit aller dans le contentpane).
    Le code que tu montres ne concerne la partie qui contient données, résultats, messages et logo (en bas à droite donc). Ni table, ni boutons donc.

    Ensuite, pour l'image en elle-même, le problème est probablement un problème de chemin d'accès. L'image n'est pas trouvée à l'endroit indiqué. ImageIcon gère ça de façon silencieuse et n'affiche rien. De toute manière, si c'est un logo, il sera plus intéressant de le distribuer avec l'application, donc dans le jar, plutôt qu'à côté. Donc au lieu d'utiliser un accèd par chemin d'accès à un fichier, utiliser un accès par url de ressource. Tu mets le fichier logo.png dans le dossier qui contient ta classe Centre par exemple et tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JLabel image = new JLabel(new ImageIcon(Centre.class.getResource("logo.png")));
    Pour le problème de layout, tu utilises des JPanel avec BorderLayout les uns dans les autres, en utilisant les emplacements sud, nord, est et ouest pour la plupart des composants. Le fonctionnement de ces emplacements en ce qui concerne le dimensionnement utilise les "preferredsize" des composants. Les composants disposés dans les zones "verticales" (EAST et WEST) auront pour largeur la largeur préférentielle et les composants disposés dans les zones "horizontales" (SOUTH et NORTH) auront pour hauteur leur hauteur préférentielle. Les autres dimensions seront calculées par rapport au dimension du conteneur. Le centre lui prendra toute la place qui reste au milieu. Hors il s'agit de JPanel vide, donc de taille préférentielle 10x10. Sauf pour le JLabel dont la taille préférentielle sera celle nécessitée par le texte que tu mets. Idem pour le panel du logo (sa taille sera celle de l'image).
    En plus, il n'y a pas de composant au centre de Centre, donc une zone va rester vide au milieu.

    Je pense que tu aurais un résultat plus proche de ce que tu attends en considérant que données est au centre d'un panel, et qu'il y a un panel au sud, qui contient à droite un logo, et au centre un autre panel. En revanche, je ne sais pas exactement ce que tu recherches pour la répartition entre données et messages.
    Ce qui donnera ça :
    Nom : Capture.PNG
Affichages : 1704
Taille : 23,3 Ko
    Voici le code :
    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
    public class Centre extends JPanel{
    	public Centre(){
    		super(new BorderLayout());
     
    		JPanel donnees = new JPanel();
    		add(donnees);
     
    		JPanel southPanel = new JPanel(new BorderLayout());
    		add(southPanel, BorderLayout.SOUTH);
    		JLabel logo = new JLabel(new ImageIcon(Centre.class.getResource("logo.png")));
    		southPanel.add(logo, BorderLayout.EAST);
     
    		JPanel centerPanel = new JPanel(new GridLayout(2, 0));
    		southPanel.add(centerPanel);
     
    		JPanel resultat = new JPanel();
    		JPanel messages = new JPanel();
    		centerPanel.add(resultat);
    		centerPanel.add(messages);
     
    		}
    }
    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 confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut
    Merci pour votre réponse. J'ai fait la modification pour l'image mais j'ai une erreur:

    Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:217)
    at view.Centre.<init>(Unknown Source)
    at view.Fenetre.<init>(Unknown Source)
    at Lanceur.main(Unknown Source)

    Pourtant j'ai bien déplacé mon fichier.

    Effectivement pour les boutons du haut je souhaite des menu déroulants, merci pour ton aide. Pour ce qui y est du contenu de données, message et résultats je souhaite le modifier selon ce qu'écrit l'utilisateur dans données, mais je n'ai pas encore commencé à coder cette partie.

  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
    Citation Envoyé par Akame14 Voir le message
    Merci pour votre réponse. J'ai fait la modification pour l'image mais j'ai une erreur:

    Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:217)
    at view.Centre.<init>(Unknown Source)
    at view.Fenetre.<init>(Unknown Source)
    at Lanceur.main(Unknown Source)
    Ça veut dire que le fichier n'est pas à l'endroit que tu indiques (l'url est null donc). Tu as bien mis le fichier au même endroit que Centre.java (même dossier/package) ?
    Nom : Capture.PNG
Affichages : 1655
Taille : 6,3 Ko
    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 confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut
    Oui oui c'est pour ca je ne comprends pas pourquoi ça marche pas :/

    Nom : 15.png
Affichages : 1691
Taille : 12,1 Ko

  6. #6
    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
    Ton fichier n'est pas logo.png, mais logo.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.

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut
    Oui j'ai vu ca après, j'ai changé dans mon code mais j'ai toujours la même erreur

  8. #8
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut
    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
     
    public class Centre extends JPanel{
    	public Centre(){
    		super(new BorderLayout());
     
    		JPanel donnees = new JPanel();
    		add(donnees);
     
    		JPanel southPanel = new JPanel(new BorderLayout());
    		add(southPanel, BorderLayout.SOUTH);
    		JLabel logo = new JLabel(new ImageIcon(Centre.class.getResource("logo.jpg")));
    		southPanel.add(logo, BorderLayout.EAST);
     
    		JPanel centerPanel = new JPanel(new GridLayout(2, 0));
    		southPanel.add(centerPanel);
     
    		JPanel resultat = new JPanel();
    		JPanel messages = new JPanel();
    		centerPanel.add(resultat);
    		centerPanel.add(messages);
    	}

  9. #9
    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
    Tu compiles et exécutes comment ? Via un IDE ou via ligne de commandes ?
    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.

  10. #10
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut
    Notre professeur a demandé d'utiliser un build.XML

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    <?xml version="1.0"?>
     
    -<project name="junit-example">
     
    <property name="class" value="../class"/>
     
    <property name="src" value="../src"/>
     
    <property name="doc" value="../javaDoc"/>
     
     
    -<path id="classpath.test">
     
    <pathelement location="../lib/junit-4.12.jar"/>
     
    <pathelement location="../lib/hamcrest-core-1.3.jar"/>
     
    <pathelement location="${class}"/>
     
    </path>
     
     
    -<target name="compile">
     
    <mkdir dir="${class}"/>
     
    <javac includeantruntime="false" destdir="${class}" srcdir="${src}"/>
     
    </target>
     
     
    -<target name="test-compile" depends="compile">
     
    <mkdir dir="${class}"/>
     
     
    -<javac includeantruntime="false" destdir="${class}" srcdir="${src}">
     
    <classpath refid="classpath.test"/>
     
    </javac>
     
    </target>
     
     
    -<target name="doc">
     
     
    -<javadoc destdir="${doc}" sourcepath="${src}">
     
    <fileset dir="${src}"/>
     
    </javadoc>
     
    </target>
     
     
    -<target name="test" depends="test-compile">
     
     
    -<junit fork="true" haltonfailure="yes" printsummary="on">
     
     
    -<classpath>
     
    <path refid="classpath.test"/>
     
    <pathelement location="${class}"/>
     
    </classpath>
     
    <formatter usefile="false" type="brief"/>
     
     
    -<batchtest>
     
    <fileset dir="${src}" includes="**/*Test.java"/>
     
    </batchtest>
     
    </junit>
     
    </target>
     
    </project>

  11. #11
    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
    Ce script ne copiera pas tout seul le fichier dans le dossier de classes, il faut le modifier pour qu'il le fasse.
    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.

  12. #12
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 87
    Par défaut
    D'accord, en tout cas j'ai réussi à trouver une solution l'image apparaît, merci pour votre aide.

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

Discussions similaires

  1. [JPanel]Mettre une image dans un JPanel
    Par ehmppowa dans le forum Composants
    Réponses: 11
    Dernier message: 30/11/2005, 20h17
  2. [JAR] inserer une image dans une archive
    Par mawashee dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2005, 23h35
  3. Comment inserer une image dans une table sous sql qerveur
    Par zeddy23 dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/02/2005, 08h51
  4. inserer une image dans un dbgrid delphi
    Par cello dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/02/2004, 18h51
  5. [VB6] [Excel] Insérer une image dans une feuille
    Par mathias dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 09/10/2002, 07h44

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