Pour ajouter des images à votre application vous avez différentes solutions, mais attention, toutes ne fonctionnent pas correctement ! Voici donc comment procéder pour avoir un programme fonctionnel une fois compilé…
Pour notre exemple partons du principe que l’on veut associer une image à un
bouton (une icône donc). Comme nous sommes organisés, on stocke l’image dans
le package “resources”.
Du point de vue du système un package est simplement
un dossier, voici donc comment créer notre icône :
printButton = new JButton(newImageIcon(".\\src\\ressources\\print.png"));
Le constructeur de notre
bouton permet de l’associer à une image, et le constructeur de l’ImageIcon
peut prendre en paramètre le CHEMIN de l’image. Si vous lancez votre programme
avec votre IDE, tout va bien elle est bien là. Mais si vous créez un
.jar…pouf, disparue !
Et c’est tout à fait normal car dans le .jar plus de notions de “chemins” : si ce n’est pas compilé, ce n’est pas présent. Un point c’est tout.
Il faut donc indiquer par un moyen ou un autre à notre IDE de “compiler” les images.Voici comment je procède :
ClassLoader classLoader = getClass().getClassLoader();
URL file = classLoader.getResource("resources/print.png");
Je définis un
ClassLoader
correspondant à ma classe en cours. Il sert à localiser et générer
des données constituant la définition de la classe.
J’utilise alors mon
ClassLoader pour créer une URL servant donc à localiser mon image. Remarquez
bien que l’on donne un chemin non pas dans un système de fichiers, mais sous
forme de package ! C’est là la clé de notre problème : le compilateur va
intégrer correctement l’image au .jar car elle est définie comme faisant
partie d’un package.
Nous pouvons maintenant instancier notre bouton :
printButton = new JButton(new ImageIcon(file));
Bonnes insertions ;-)