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:
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:
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:
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:
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:
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.