Insérer une image dans un bouton

Signaler
Messages postés
41
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
25 janvier 2012
-
Messages postés
4
Date d'inscription
dimanche 26 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2015
-
Bonjour,

Je voudrais insérer une image sur mon bouton imprimer. Je suis sur eclipse et mon image se trouve dans un dossier Images qui se trouve dans le dossier source de mon projet .Mon image s'apelle "Imprimer1.jpg" Voici mon code ...




merci

11 réponses

Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Re,

Effectivement, je t'ai donné un mauvais conseil.
Tu n'as pas d'image car le chemin spécifié est introuvable.

Il faut omettre le nom du dossier source (dont le contenu est dans le classpath) et passer par une URL. De cette manière ton code sera valide même au sein d'un Jar.

URL urlImage = getClass().getResource("/Imprimer1.jpg");
Icon icone = new ImageIcon(urlImage);
JButton imprimer = new JButton(icone);
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Ce n'est pas une erreur de compilation, mais une erreur à l'exécution.
Ça signifie que le fichier /Images/Imprimer1.jpg n'est pas dans le classpath.

As-tu essayé en mettant juste "/Imprimer1.jpg" ?

Je te rappelle que ton dossier Images doit être un dossier source. De cette manière il sera inclus dans le classpath avec une ligne comme celle-ci dans le fichier .classpath de ton projet :

<classpathentry kind="src" path="Images"/>

Pour être sûr de savoir de quoi on parle, peux-tu nous montrer l'arborescence de ton projet?
Messages postés
41
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
25 janvier 2012

JButton Imprimer = new JButton(new ImageIcon(Images\Imprimer1.jpg));
Imprimer.setPreferredSize(new Dimension(80,50));
gbc.gridwidth = GridBagConstraints.REMAINDER;;
gbc.gridx = 2;
gbc.gridy = 11;
container.add(Imprimer, gbc);
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Salut,

Quel est ton problème?

Il me semble évident que ta première ligne est incorrecte.
Si tu as créé un dossier source nommé Images dans ton projet je pense que la première ligne devrait plutôt être :

JButton imprimer = new JButton(new ImageIcon("/Images/Imprimer1.jpg"));

Jonathan
Messages postés
41
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
25 janvier 2012

Merci beaucoup mon code est correct maintenant mais l'image ne s'affiche pas... Peut-être à cause de la resolution de base de l'image qui est de 128*128. j'ai essayé de changer la taille de mon bouton mais rien n'y fait elle ne s'affiche pas. Peux-tu m'aider ?

CdB2006
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012

Bonjour

voici un exemple de bouton avec icon

private JButton getJButton1() {
if (jButton1 == null) {
jButton1 = new JButton();
jButton1.setBounds(new Rectangle(218, 21, 129, 33));
jButton1.setIcon(new ImageIcon("Images/Imprimer1.jpg"));
jButton1.setText("   Annuler");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {

 // TODO Auto-generated Event stub actionPerformed()

System.exit(0);
}
});
}
return jButton1;
}



je te conseil de travailler avec visual editor (plugin ) pour vous facilite les tâches au niveau des interface graphique
Messages postés
41
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
25 janvier 2012

Merci jojo mais il me souligne la ligne de l'url et me propose de le changer en java.net.URL et si je fais ca il me mais une erreur pendant la compillation. Dois-je mettre comme chemin d'accès "/Imprimer1.jpg" ou "/Images/Imprimer1.jpg" ?
Messages postés
519
Date d'inscription
mercredi 21 mars 2007
Statut
Membre
Dernière intervention
19 décembre 2016
23
Salut,

Oui, il faut importer la classe java.net.URL.
Si ton dossier source est "Images", tu dois mettre "/Imprimer1.jpg".
Quelle est l'erreur de compilation?
Messages postés
41
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
25 janvier 2012

Voici l'exception :




Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.ImageIcon.(Unknown Source)
at fenetreBille.(fenetreBille.java:411)
at fenetreBase$BoutonListener.actionPerformed(fenetreBase.java:77)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Messages postés
41
Date d'inscription
jeudi 20 août 2009
Statut
Membre
Dernière intervention
25 janvier 2012

Et ca c'est mon code:


java.net.URL urlImage = getClass().getResource("/Images/Imprimer1.jpg");
Icon icone = new ImageIcon(urlImage);
JButton Imprimer = new JButton(icone);
Imprimer.setPreferredSize(new Dimension(80,50));
gbc.gridwidth = GridBagConstraints.REMAINDER;;
gbc.gridx = 2;
gbc.gridy = 12;
container.add(Imprimer, gbc);
Messages postés
4
Date d'inscription
dimanche 26 juin 2005
Statut
Membre
Dernière intervention
17 janvier 2015
2
Bonjour,

J'avais les mêmes problèmes lorsque je commençais à jouer avec des images, icônes, etc.
Si je me souviens bien, le chemin est relatif à la classe qui l'utilise.
Pour ne pas me prendre la tête, j'utilise une classe "Constantes" (singleton) qui s'occupe de gérer tout ce dont j'ai besoin dans mon appli (textes, couleurs, icône, images, etc.)

Pour faire bref :
la classe Constantes est dans le package fr.monappli
les images, icônes,... sont dans le répertoire fr.monappli.img
Rappel : les packages décrivent l'arborescence des répertoires
dans ma classe Constantes, j'ai le code suivant :
	/**
	 * icone donne acces a des icones pre defini
	 * @author FreddyONE73
	 */
	public enum icones {
		quitter("quitter.png"),
		icon_Appli("icon.png"),
		btn_up("monter.png"),
		btn_suppr("supprimer.png"),
		btn_down("descendre.png");
		private Icon i;
		private icones (String p_fichier_image){
			i = new ImageIcon(Constantes.class.getResource("img/"+p_fichier_image));
		}
		public Icon image(){return i;}
	}


Lorsque j'ai besoin d'un icône, j'utilise par exemple :
JButton btn_monter = new JButton(Constantes.icones.btn_up.image());


Voilà, j'espère avoir été assez claire
Si vous coincer sur "singleton", vous n'aurez pas de mal à trouver, c'est très documenté.

L'avantage de cette solution, c'est qu'il est très facile de gérer toutes les icônes/images... car tout est au même endroit.
Tout est chargé une seule fois. Même si vous utilisez plusieurs fois un icône/image...
les png avec transparence fonctionnent parfaitement.

En espérant avoir été utile à celles et ceux qui arrivent là