diff --git a/src/main/java/fr/univlille/iut/r304/thermo/Main.java b/src/main/java/fr/univlille/iut/r304/thermo/Main.java index a72df01ec8636070d321cba7270031f2066169a9..38c1de01af7909812e9a6c750cf3238ffd4b169a 100644 --- a/src/main/java/fr/univlille/iut/r304/thermo/Main.java +++ b/src/main/java/fr/univlille/iut/r304/thermo/Main.java @@ -1,6 +1,5 @@ package fr.univlille.iut.r304.thermo; - import fr.univlille.iut.r304.thermo.model.Thermostat; import fr.univlille.iut.r304.thermo.view.TextView; import javafx.application.Application; @@ -10,13 +9,19 @@ public class Main extends Application { @Override public void start(Stage primaryStage) { - Thermostat model = new Thermostat(); // Création du modèle - new TextView(model); // Création de la vue - new TextView(model); // Création de la vue + // Créer le modèle avec une température initiale + Thermostat thermostat = new Thermostat(20.0); + + // Créer deux vues pour le même modèle + TextView view1 = new TextView(thermostat); + TextView view2 = new TextView(thermostat); + + // Afficher les vues + view1.show(); + view2.show(); } public static void main(String[] args) { launch(args); } } - diff --git a/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java b/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java index 30cc8d4125f7dc1c872254a978f7b89232a73b9b..c8f956bd1403bc84173f73ac8d39aad580b01533 100644 --- a/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java +++ b/src/main/java/fr/univlille/iut/r304/thermo/model/Thermostat.java @@ -1,30 +1,37 @@ package fr.univlille.iut.r304.thermo.model; +import fr.univlille.iut.r304.utils.ConnectableProperty; + public class Thermostat implements ITemperature { - private double temperature; + private ConnectableProperty temperatureProperty; + + public Thermostat(double initialTemperature) { + this.temperatureProperty = new ConnectableProperty(); + this.temperatureProperty.setValue(initialTemperature); + } - public Thermostat() { - this.temperature = 20.0; // Température initiale par défaut + public ConnectableProperty temperatureProperty() { + return temperatureProperty; } @Override public void setTemperature(double d) { - this.temperature = d; + temperatureProperty.setValue(d); } @Override public Double getTemperature() { - return this.temperature; + return (Double) temperatureProperty.getValue(); } @Override public void incrementTemperature() { - this.temperature += 1.0; // Incrémentation de 1 degré + setTemperature(getTemperature() + 1); } @Override public void decrementTemperature() { - this.temperature -= 1.0; // Décrémentation de 1 degré + setTemperature(getTemperature() - 1); } } diff --git a/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java b/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java index 6465b656b0377515cc6883965347767104c174e3..f88bc7bd8711a99ca16bc1ca3b6e5d76b3c3acd9 100644 --- a/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java +++ b/src/main/java/fr/univlille/iut/r304/thermo/view/TextView.java @@ -1,6 +1,8 @@ package fr.univlille.iut.r304.thermo.view; import fr.univlille.iut.r304.thermo.model.Thermostat; +import fr.univlille.iut.r304.utils.ConnectableProperty; +import fr.univlille.iut.r304.utils.Observer; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; @@ -10,13 +12,15 @@ import javafx.scene.layout.VBox; import javafx.geometry.Pos; import javafx.stage.Stage; -public class TextView extends Stage implements ITemperatureView { +public class TextView extends Stage implements ITemperatureView, Observer { private Thermostat model; private TextField temperatureField; + private ConnectableProperty temperatureProperty; public TextView(Thermostat model) { this.model = model; + this.temperatureProperty = model.temperatureProperty(); // Titre de la fenêtre this.setTitle("Taarit Ai Thermostat"); @@ -25,6 +29,7 @@ public class TextView extends Stage implements ITemperatureView { Label unitLabel = new Label("Température en Celsius"); VBox vbox = new VBox(10, unitLabel); vbox.setAlignment(Pos.CENTER); + temperatureField = new TextField(String.valueOf(model.getTemperature()) + " °C"); temperatureField.setEditable(false); // Le champ n'est pas modifiable directement @@ -46,6 +51,9 @@ public class TextView extends Stage implements ITemperatureView { Scene scene = new Scene(root, 300, 100); this.setScene(scene); this.show(); + + // Attacher cette vue comme observateur du modèle + model.temperatureProperty().attach(this); } @Override @@ -57,17 +65,26 @@ public class TextView extends Stage implements ITemperatureView { @Override public void incrementAction() { model.incrementTemperature(); - updateView(); + // Mise à jour automatique via le modèle } @Override public void decrementAction() { model.decrementTemperature(); - updateView(); + // Mise à jour automatique via le modèle } - // Mise à jour de l'affichage lorsque la température change - private void updateView() { - temperatureField.setText(String.valueOf(model.getTemperature()) + " °C"); + @Override + public void update(fr.univlille.iut.r304.utils.Observable observable, Object data) { + // Mise à jour de l'affichage lorsque la température change + temperatureField.setText(String.valueOf(data) + " °C"); + } + + @Override + public void update(fr.univlille.iut.r304.utils.Observable observable) { + // Non utilisé mais nécessaire pour implémenter Observer + } + public ConnectableProperty getTemperatureProperty() { + return temperatureProperty; } }