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

JavaFX Discussion :

Mettre un icône sur un bouton


Sujet :

JavaFX

  1. #1
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut Mettre un icône sur un bouton
    Bonjour,

    Dans un projet JavaFX (sans SceneBuilder, parce que je ne le maîtrise pas), j'ai mis un bouton sur une ToolBar. Je voudrais simplement que, au lieu d'afficher du texte, il affiche un icône. C'est assez fréquent, ce n'est pas une idée extravagante. En cherchant un peu sur les forums et ailleurs, j'ai trouvé une façon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		Button btnQuitter = new Button();
     
    		ImageView quitter = new ImageView(new Image(getClass().getResourceAsStream("exit.png")));
    		btnQuitter.setGraphic(quitter);
     
    		ToolBar tb = new ToolBar(btnQuitter);
    Mon image est bien à la racine du projet. J'ai d'autres fichiers de ressources pour d'autres fonctionnalités, et l'application les trouve sans problème. Alors que là, non. Qu'est-ce qui cloche, dans mon code ?

    La console me dit

    Caused by: java.lang.NullPointerException: Input stream must not be null
    at javafx.scene.image.Image.validateInputStream(Image.java:1128)
    at javafx.scene.image.Image.<init>(Image.java:706)


    Merci de votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 212
    Points : 184
    Points
    184
    Par défaut
    essayer avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getResourceAsStream("/exit.png")
    // noter l'ajout du slash.
    voir doc:

    The getResource and getResourceAsStream methods find a resource with a given name. They return null if they do not find a resource with the specified name. The rules for searching for resources associated with a given class are implemented by the class's ClassLoader. The Class methods delegate to ClassLoader methods, after applying a naming convention: if the resource name starts with "/", it is used as is. Otherwise, the name of the package is prepended, after converting all periods (.) to slashes (/).


    si çà n'a pas marché, poster une image sur la structure de votre projet

  3. #3
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Bonjour win_ubuntu,

    Ça ne marche pas non plus. J'ai aussi essayé avec "file:exit.png", et "file:/exit.png". Rien à faire. Pourtant, le fichier Main.java, qui appelle la ressource est dans le package par défaut.

    Merci d'avoir essayé.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Est-ce que l'image est sensée être a la racine du JAR ou dans le répertoire racine de l'application (pas pareil) ? Es-tu sur de son chemin d’accès ?

  5. #5
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Bonjour bouye,

    Pour l'instant, je n'ai pas compilé le code. Je développe l'application sous Eclipse. Pas de Jar donc. Mon fichier image est à la racine du projet. Puis, j'ai mon fichier "src" avec mes deux packages "Modele" et "Scenes". Mais la classe qui appelle l'image est dans mon package par défaut.
    De plus, j'appelle d'autres fichiers (l'icone de la fenêtre, un fichier pdf de documentation) qui s'affichent sans problème, et sont au même emplacement. Pourquoi ça ne marche pas avec celui-là ?
    Merci pour votre aide.

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 860
    Points : 22 900
    Points
    22 900
    Billets dans le blog
    51
    Par défaut
    Si l'image est a la racine du projet, elle n'est alors peut-être (sans doute) pas copiée la ou Eclipse met les class quand tu lances ton projet ou ce répertoire n'est pas sur le CLASSPATH et donc l'image n'est pas trouvée lors de l’exécution. Quand ton programme tourne tu peux récupérer le répertoire d’exécution avec System.getProperty("user.dir") et lister son contenu pour voir si l'image est bien la. Idem pour voir les répertoires sur le CLASSPATH avec System.getProperty("java.class.path")

  7. #7
    Membre régulier Avatar de Markos22
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2016
    Messages : 198
    Points : 84
    Points
    84
    Par défaut
    Merci, bouye !

    En effet, le problème venait bien du ClassPath : il menait vers le sous-dossier bin de mon projet, alors que les autres ressources (je rappelle qu'elles sont pourtant trouvées sans problème par l'application) se trouvent à la racine. Après avoir déplacé l'image dans le dossier "MonProjet/bin", l'image s'affiche bel et bien !

    Mais la question subsidiaire est toujours : comment change-t-on le ClassPath d'un projet sous Eclipse ? En attendant, je vais chercher.

Discussions similaires

  1. [deb] mettre une image sur un bouton
    Par phestaca dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 25/03/2006, 23h45
  2. mettre une image sur un bouton de commande
    Par delamarque dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 05/01/2006, 20h18
  3. Mettre une icône sur un SpeedButton
    Par mohamed dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/10/2005, 10h11
  4. [wxpython][wx.frame] mettre une image sur un bouton
    Par Kyti dans le forum wxPython
    Réponses: 7
    Dernier message: 02/05/2005, 12h13
  5. [JBouton] Comment mettre une image sur un bouton ?
    Par Kyti dans le forum Composants
    Réponses: 6
    Dernier message: 11/03/2005, 16h08

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