diff --git a/javafx_1.iml b/javafx_1.iml new file mode 100644 index 0000000..8969dea --- /dev/null +++ b/javafx_1.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/images/snow.png b/resources/images/snow.png new file mode 100644 index 0000000..492f08b Binary files /dev/null and b/resources/images/snow.png differ diff --git a/resources/images/sun.png b/resources/images/sun.png new file mode 100644 index 0000000..d538c3e Binary files /dev/null and b/resources/images/sun.png differ diff --git a/resources/images/suncloud.png b/resources/images/suncloud.png new file mode 100644 index 0000000..1799d51 Binary files /dev/null and b/resources/images/suncloud.png differ diff --git a/resources/view/Image.fxml b/resources/view/Image.fxml new file mode 100644 index 0000000..5513879 --- /dev/null +++ b/resources/view/Image.fxml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + +
+ +
+
+
+
+ +
+ + +
+
+
+
+
diff --git a/resources/view/Thermostat.fxml b/resources/view/Thermostat.fxml new file mode 100644 index 0000000..1c28411 --- /dev/null +++ b/resources/view/Thermostat.fxml @@ -0,0 +1,31 @@ + + + + + + + + + + + +
+ +
+
+
+
+ +
+ + +
+
+
+
+
diff --git a/src/launcher/Launch.java b/src/launcher/Launch.java new file mode 100644 index 0000000..08bf814 --- /dev/null +++ b/src/launcher/Launch.java @@ -0,0 +1,54 @@ +package launcher; + +import javafx.application.Application; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.fxml.Initializable; +import javafx.scene.Group; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.layout.BorderPane; +import javafx.scene.layout.StackPane; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import model.Capteur; +import view.CapteurView; +import view.ImageCtrlView; +import view.ThermostatView; + +import java.io.IOException; +import java.net.URL; +import java.util.Random; +import java.util.ResourceBundle; + +public class Launch extends Application { + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage primaryStage) throws IOException, InterruptedException { + Capteur captor = new Capteur(1,"CapteurIncroyable", 15); + + Stage thermostatStage = new Stage(); + CapteurView capteurView = new ImageCtrlView(captor,"view/Image.fxml","mon titre"); + ThermostatView thermostatView = new ThermostatView(captor,"view/Thermostat.fxml","mon titre"); + + Random random = new Random(); + + Thread t = new Thread() { + public void run() { + while (true) { + captor.setTemp(random.nextInt(30)); + try { + sleep(1000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } + }; + t.start(); + } +} + diff --git a/src/model/Capteur.java b/src/model/Capteur.java new file mode 100644 index 0000000..e573844 --- /dev/null +++ b/src/model/Capteur.java @@ -0,0 +1,52 @@ +package model; + + +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; + +import java.util.Random; + +public class Capteur implements CapteurAbstrait{ + + private int id; + private String nom; + private ObjectProperty temp = new SimpleObjectProperty<>(); + + public Capteur(int id, String nom, int pTemp){ + this.id = id; + this.nom = nom; + temp.setValue((double)pTemp); + } + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = nom; + } + + public ObjectProperty getTemp() { + return temp; + } + + public void setTemp(int pTemp) { + this.temp.set((double)pTemp); + } + + @Override + public ObjectProperty genTemp() { + Random random = new Random(); + this.setTemp(random.nextInt(30)); + return this.getTemp(); + } +} diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java new file mode 100644 index 0000000..e2d33fb --- /dev/null +++ b/src/model/CapteurAbstrait.java @@ -0,0 +1,7 @@ +package model; + +import javafx.beans.property.ObjectProperty; + +public interface CapteurAbstrait { + public ObjectProperty genTemp(); +} diff --git a/src/model/CapteurVirtuel.java b/src/model/CapteurVirtuel.java new file mode 100644 index 0000000..4ec8758 --- /dev/null +++ b/src/model/CapteurVirtuel.java @@ -0,0 +1,34 @@ +package model; + +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleObjectProperty; + +import java.util.List; + +public class CapteurVirtuel implements CapteurAbstrait{ + + private List capteurs; + + public CapteurVirtuel(List cs){ + this.capteurs = cs; + } + public void addCapteur(CapteurAbstrait c){ + capteurs.add(c); + } + + public void removeCapteur(CapteurAbstrait c){ + capteurs.remove(c); + } + + @Override + public ObjectProperty genTemp() { + ObjectProperty avg = new SimpleObjectProperty<>(); + avg.setValue((double) 0); + + for (CapteurAbstrait c: capteurs) { + avg.setValue(c.genTemp() + avg.getValue()); + } + avg.set(avg.getValue()/capteurs.size()); + return avg.getValue(); + } +} diff --git a/src/view/CapteurView.java b/src/view/CapteurView.java new file mode 100644 index 0000000..da8e647 --- /dev/null +++ b/src/view/CapteurView.java @@ -0,0 +1,30 @@ +package view; + +import javafx.application.Platform; +import javafx.beans.InvalidationListener; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.stage.Stage; +import model.Capteur; +import javafx.scene.input.MouseEvent; +import javafx.event.EventHandler; + +import java.io.IOException; + + +public abstract class CapteurView extends FXMLView { + @FXML + Button myBtn; + + protected Capteur capteur; + + public CapteurView(Capteur capteur,String url, String title) throws IOException { + super(url,title); + this.setCapteur(capteur); + } + + public void setCapteur(Capteur capteur) { + this.capteur = capteur; + } + +} diff --git a/src/view/FXMLView.java b/src/view/FXMLView.java new file mode 100644 index 0000000..ef1d7e7 --- /dev/null +++ b/src/view/FXMLView.java @@ -0,0 +1,21 @@ +package view; + +import javafx.fxml.FXMLLoader; +import javafx.scene.Group; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +import java.io.IOException; + +public class FXMLView extends Stage { + + public FXMLView(String url, String title) throws IOException { + FXMLLoader fxmlLoader = new FXMLLoader(this.getClass().getClassLoader().getResource(url)); + fxmlLoader.setController(this); + Parent root = fxmlLoader.load(); + Scene scene = new Scene(root); + setScene(scene); + show(); + } +} diff --git a/src/view/ImageCtrlView.java b/src/view/ImageCtrlView.java new file mode 100644 index 0000000..9ba9195 --- /dev/null +++ b/src/view/ImageCtrlView.java @@ -0,0 +1,61 @@ +package view; + +import javafx.application.Platform; +import javafx.beans.Observable; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.stage.Stage; +import model.Capteur; + +import java.io.IOException; +import java.io.InputStream; + +public class ImageCtrlView extends CapteurView{ + private final static String fxmlfile = "view/Image.fxml"; + Class clazz = this.getClass(); + InputStream input; + + protected Capteur capteur; + @FXML + ImageView imageview; + + public ImageCtrlView(Capteur capteur, String url, String title) throws IOException { + super(capteur,url,title); + this.capteur = capteur; + myBtn.setOnAction(e -> Platform.exit()); + changeImage(); + } + + private void changeImage() throws IOException { + if (this.capteur.getTemp().getValue() > 25){ + input = clazz.getResourceAsStream("/images/sun.png"); + imageview.setImage(new Image(input)); + } else if (this.capteur.getTemp().getValue() > 10) { + input = clazz.getResourceAsStream("/images/suncloud.png"); + imageview.setImage(new Image(input)); + } + else{ + input = clazz.getResourceAsStream("/images/snow.png"); + imageview.setImage(new Image(input)); + } + imageview.setFitHeight(100); + imageview.setFitWidth(100); + } + + private void quit(){ + Platform.exit(); + } + + public void initialize() { + /*try { + changeImage(); + } catch (IOException e) { + throw new RuntimeException(e); + }*/ + } +} diff --git a/src/view/ThermostatView.java b/src/view/ThermostatView.java new file mode 100644 index 0000000..fe2f525 --- /dev/null +++ b/src/view/ThermostatView.java @@ -0,0 +1,38 @@ +package view; + +import javafx.application.Platform; +import javafx.beans.Observable; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.Spinner; +import javafx.scene.control.SpinnerValueFactory; +import javafx.stage.Stage; +import model.Capteur; + +import java.io.IOException; + +public class ThermostatView extends CapteurView{ + private final static String fxmlfile = "view/Thermostat.fxml"; + + @FXML + Spinner spin; + + protected Capteur capteur; + + public ThermostatView(Capteur capteur, String url, String title) throws IOException { + super(capteur,url,title); + this.capteur = capteur; + this.spin.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0d,100d)); + this.spin.getValueFactory().valueProperty().bindBidirectional(this.capteur.getTemp()); + myBtn.setOnAction(e -> Platform.exit()); + } + + public void initialize() { + //SpinnerValueFactory valueFactory = new SpinnerValueFactory.IntegerSpinnerValueFactory(capteur.getTemp(), capteur.getTemp(), capteur.getTemp()); + //spin.setValueFactory(valueFactory); + + } + +}