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 :

Chargement d'image en Javafx et MVC


Sujet :

JavaFX

  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Par défaut Chargement d'image en Javafx et MVC
    Bonjour tout le monde,
    Je débute à peine avec Javafx et j'ai pu trouver un code sur internet qui me permet de charger une image mais sauf que tout est melanger dans le même fichier.
    Je vous laisse voir ce 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
    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
    package controllers;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.net.URL;
     
    import javafx.application.Application;
    import javafx.scene.Group;
    import javafx.scene.Scene;
    import javafx.scene.image.Image;
    import javafx.scene.image.ImageView;
    import javafx.stage.Stage;
     
    public class ImageExample extends Application {
        @Override
        public void start(Stage stage) throws FileNotFoundException {
     
            //Creating an image
            try {
                //final URL imageURL = getClass().getResource("maison.jpg");
                Image image = new Image(new FileInputStream("ressources/maison.jpg"));
     
                //Setting the image view
                ImageView imageView = new ImageView(image);
     
                //Setting the position of the image
                imageView.setX(50);
                imageView.setY(25);
     
                //setting the fit height and width of the image view
                imageView.setFitHeight(455);
                imageView.setFitWidth(500);
     
                //Setting the preserve ratio of the image view
                imageView.setPreserveRatio(true);
     
                //Creating a Group object
                Group root = new Group(imageView);
     
                //Creating a scene object
                Scene scene = new Scene(root, 600, 500);
     
                //Setting title to the Stage
                stage.setTitle("Loading an image");
     
                //Adding scene to the stage
                stage.setScene(scene);
     
                //Displaying the contents of the stage
                stage.show();
            }catch (Exception e){System.out.println(e.getMessage());}
        }
        public static void main(String args[]) {
            launch(args);
        }
    }
    À present, j'essaie de faire la même chose mais en MVC, pour cela, j'ai séparé ma view (fichier fxml) le controller et ma classe principale

    à voir :
    fic fxml
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <?import javafx.scene.control.Button?>
    <?import javafx.scene.control.TextField?>
    <?import javafx.scene.layout.StackPane?>
     
    <?import javafx.scene.image.Image?>
    <?import javafx.scene.image.ImageView?>
    <StackPane prefHeight="300" prefWidth="300" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.Controller">
        <children>
     
            <ImageView fitWidth="300" fitHeight="300">
               <image >
                   <Image fx:id="img" preserveRatio="true" smooth="true">
               </image>
            </ImageView>
            <TextField fx:id="txt" />
            <Button fx:id="btn" onAction="#direbonjour" prefHeight="0.0" prefWidth="52.0" text="Ajout">
     
            </Button>
        </children>
    </StackPane>
    classe controller
    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
    package controllers;
     
    import javafx.application.Application;
    import javafx.event.ActionEvent;
    import javafx.fxml.FXML;
    import javafx.fxml.FXMLLoader;
    import javafx.fxml.Initializable;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.image.Image;
    import javafx.scene.control.TextField;
     
    import javafx.stage.Stage;
     
    import java.awt.*;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.net.URL;
    import java.util.ResourceBundle;
     
    public class Controller implements Initializable {
       @FXML
       private TextField txt;
        @FXML
        private Image img;
     
        public Controller(String url) throws FileNotFoundException {
            try {
                img=FXMLLoader.load(getClass().getResource(url));
     
            }catch (Exception e){}
        }
     
        private  FileInputStream paht;
        public void loaderImg()throws FileNotFoundException {
            paht= new FileInputStream("ressources/maison.jpg");
        }
        public String chemin(){
            return "ressources/maison.jpg";
        }
     
        public void direbonjour(ActionEvent actionEvent) {
            System.out.println("coucou");
            txt.setText("Coucou");
     
        }
     
        @Override
        public void initialize(URL location, ResourceBundle resources) {
     
     
        }
    }
    Et le classe principale:
    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
     
    package controllers;
     
    import javafx.application.Application;
    import javafx.fxml.FXMLLoader;
    import javafx.scene.Parent;
    import javafx.scene.Scene;
    import javafx.scene.layout.Pane;
    import javafx.stage.Stage;
     
    import javax.swing.text.html.ImageView;
    import java.awt.*;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.net.URL;
     
    public class Image extends Application {
     
     
     
     
        public void start(Stage primaryStage)  {
            Parent login=null;
            try {
                FXMLLoader loader=new FXMLLoader(getClass().getResource("../view/chargerImage.fxml"));
                //loader.setController(new Controller("ressources/maison.jpg"));
                login=loader.load();
                //login=FXMLLoader.load(getClass().getResource("../view/chargerImage.fxml"));
     
            }catch (IOException e){
                System.out.println(e.getMessage());
            }
            Scene scene=new Scene(login);
            primaryStage.setScene(scene);
            primaryStage.show();
        }
     
     
        public static void main(String[] args) {
            launch(args);
        }
    }
    mon problème, je sais plus comment importer l'image, j'ai tenté un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public Controller(String url) throws FileNotFoundException {
            try {
                img=FXMLLoader.load(getClass().getResource(url));
     
            }catch (Exception e){}
        }
    dans le constructeur mais je sais à l'avance que ca va pas aller, c'est juste une maniere de vs exprimer ce que je veux faire. Donc comment je peux reussir à importer l'image en voulant le faire que dans le controller le code java et que je dois pas faire img=new Image(FileImputStream(url))....
    Merci d'avance.

  2. #2
    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
    A modifier :

    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ImageView fx:id="imgView" fitWidth="300" fitHeight="300"/>

    Simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public final class Controller implements Initializable {
     
      @FXML
      private ImageView imgView;
     
      public setImage(String url) throws NullPointerException, IllegalArgumentException {
        final Image img = new Image(url);
        imgView.setImage(img);
      }
    Un peu plus correct :

    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
    public final class Controller implements Initializable {
     
       @FXML
       private ImageView imgView;
     
       public Controller() {
           imageProperty.addListener((observable, oldValue, newValue) -> {
               Image img = null;
               if (newValue != null) {
                 try {
                   img = new Image(newValue);
                 } catch (Exception ex) {
                   // Log...
                 }     
               }
               imgView.setImage(img);
           });
       }
     
      private final StringProperty imageProperty = new SimpleStringProperty(this, "image", null);
     
      public final void setImage(String value) {
         image.set(value);
      }
     
      public final String getImage() {
         return image.get();
      }
     
      public final StringProperty imageProperty() {
        return image;
      }
    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

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2016
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Avril 2016
    Messages : 60
    Par défaut
    Merci beaucoup pour votre réponse, elle m'a vraiment servi.

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

Discussions similaires

  1. thumbnail et chargement d'image
    Par nabil dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/01/2006, 13h27
  2. [xhtml][css] chargement d'image sur IE
    Par killgors dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 23/08/2005, 20h37
  3. chargement d'image
    Par bakonu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/06/2005, 22h40
  4. [JLabel] Chargement d'image dans une JFrame
    Par mr.t dans le forum Composants
    Réponses: 10
    Dernier message: 27/01/2005, 18h32
  5. Réponses: 21
    Dernier message: 29/04/2004, 15h45

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