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 :

Ajout d'une image dans un bouton


Sujet :

JavaFX

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 47
    Par défaut Ajout d'une image dans un bouton
    Bonjour,

    Jusqu'à maintenant j'utilisais surtout Swing et comme je trouve beaucoup d'avantages à javaFX je teste certaines fonctions pour modifier certains programmes

    Entre autres, j'essaie d'ajouter une image à un bouton. Apparemment je me plante au moment de créer une ImageView.
    J'ai essayé plusieurs choses en prenant des exemples dans des forums, mais aucune n'a fonctionné. La création d'une ImageView lance toujours une exception. J'obtiens toujours le message "ImageView pas créée";

    Merci d'avance si vous pouvez corriger le code ci-dessous et me signaler mon erreur.

    Gérard
    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
     
    package exercices;
     
    import java.io.File;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.StackPane;
    import javafx.stage.Stage;
    import javafx.stage.StageStyle;
    import javafx.application.Application;
     
    public class TestBouton extends Application 
    {
    	StackPane root = new StackPane();
     
    	@Override
    	public void start(Stage stage)
    	{
    		stage.setTitle("Test image dans un bouton");
    		stage.initStyle(StageStyle.UNDECORATED);
    		root.setStyle("-fx-border-color: Red;  "  
    							+ "-fx-border-width: 3; "  
    							+ "-fx-background-color: Black;  ");
    		Scene scene = new Scene(root, 200, 200);
    		stage.setScene(scene);
    		stage.show();
    	}
     
    	@Override
    	 public void init()
    	 {
    			Button exit = new Button("Exit");
    			exit.setOnAction(event -> System.exit(0));  
    			String img = "F:\\cinephil\\images\\sauvegarde.png";
    			File f = new File(img);
     
    		 	if (f.exists())
    			{
    				 try 
    				 {
    					     Image monImage = new Image(getClass().getResourceAsStream(img));
    					     if (monImage != null)
    					     {
    					        ImageView imgView = new ImageView(monImage);
    					        exit.setGraphic(imgView);
    					     }
     
    				 } 
    				 catch (Exception ex) 
    				 {
    					    System.out.println("ImageView pas créée");
    				 }
    			}
    			else System.out.println("fichier non trouvé");
    		 	root.getChildren().add(exit);
    	}
     
    	public static void main(String[] args)
    	{
    		launch(args);
    	}
    }

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 47
    Par défaut
    Après beaucoup de temps passé pour trouver une solution, j'ai enfin réussi en modifiant par :

    Image monImage =new Image(new java.io.FileInputStream(img));

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    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 896
    Billets dans le blog
    54
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String img = "F:\\cinephil\\images\\sauvegarde.png";
    File f = new File(img);
    [...] 
    Image monImage = new Image(getClass().getResourceAsStream(img));
    getResourceAsStream() permet de récupérer une ressource qui se trouve sur le CLASSPATH (en général, avec le ClassLoader par défaut, dans un fichier JAR ou sur un chemin relatif par rapport a l'endroit ou se trouve ta classe). Il est donc normal que cela échoue.

    Et tu as oublié de fermer ton flux pour libérer la ressource.


    Il y a plein de manière différente de faire ce que tu veux faire. En voici quelques unes :

    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
    package test.imageonbutton;
     
    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.scene.layout.VBox;
    import javafx.stage.Stage;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.net.URI;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.stream.Stream;
     
     
    public final class Main extends Application {
     
        @Override
        public void start(final Stage stage) throws Exception {
            final var imagePath = "C:\\Users\\FabriceB\\Documents\\AvatarDiscord2020.jpg";
            // File - URI/URL
            final var button1 = new Button();
            final var file = new File(imagePath);
            if (file.exists()) {
                button1.setGraphic(new ImageView(file.toURI().toString()));
            }
            // File - InputStream
            final var button2 = new Button();
            if (file.exists()) {
                try (final var input = new FileInputStream(file)) {
                    final var image = new Image(input);
                    button2.setGraphic(new ImageView(image));
                }
            }
            // Path - URI/URL
            final var button3 = new Button();
            final var path = Paths.get(imagePath);
            if (Files.exists(path)) {
                button3.setGraphic(new ImageView(path.toUri().toString()));
            }
            // Path - InputStream
            final var button4 = new Button();
            if (Files.exists(path)) {
                try (final var input = Files.newInputStream(path)) {
                    final var image = new Image(input);
                    button4.setGraphic(new ImageView(image));
                }
            }
            // Path - stream, URI/URL
            final var button5 = new Button();
            Stream.of(path)
                    .filter(Files::exists)
                    .forEach(p -> button5.setGraphic(new ImageView(p.toUri().toString())));
            // Path - stream, URI/URL, map map and remap
            final var button6 = new Button();
            Stream.of(path)
                    .filter(Files::exists)
                    .map(Path::toUri)
                    .map(URI::toString)
                    .map(ImageView::new)
                    .forEach(button6::setGraphic);
            //
            final var root = new VBox();
            root.getChildren().setAll(button1, button2, button3, button4, button5, button6);
            final var scene = new Scene(root);
            stage.setTitle("Test");
            stage.setScene(scene);
            stage.show();
        }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2022
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2022
    Messages : 47
    Par défaut
    Merci beaucoup pour ces conseils que je vais suivre.

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

Discussions similaires

  1. mettre une image dans un bouton Asp net
    Par Jsh dans le forum ASP.NET
    Réponses: 5
    Dernier message: 24/09/2007, 19h22
  2. Afficher une image dans un bouton
    Par mrfirefunk dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/09/2007, 11h31
  3. mettre une image dans un bouton
    Par fenderthrice dans le forum Visual C++
    Réponses: 1
    Dernier message: 18/07/2007, 19h24
  4. Exemple affichage d'une image dans un bouton
    Par had182 dans le forum MFC
    Réponses: 2
    Dernier message: 12/01/2006, 18h38
  5. [FLASH 8] Une image dans un bouton en actionscript
    Par littleman dans le forum Flash
    Réponses: 1
    Dernier message: 20/12/2005, 04h22

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