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.