From 54a10a2ea1224330a22bded2066ff34b2499425d Mon Sep 17 00:00:00 2001 From: Yvan Serikoff <yvan.serikoff.etu@univ-lille.fr> Date: Fri, 4 Oct 2024 10:26:36 +0200 Subject: [PATCH] fin TP4 --- .../fr/univlille/iut/r304/thermo/Main.java | 10 +- .../iut/r304/thermo/model/Thermostat.java | 18 ++-- .../iut/r304/thermo/view/SliderView.java | 97 +++++++++++++++++++ .../iut/r304/thermo/view/TextView.java | 88 +++++++++++++++-- .../univlille/iut/r304/utils/Observable.java | 2 +- 5 files changed, 193 insertions(+), 22 deletions(-) create mode 100644 src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java 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 9ab0f10..d920feb 100644 --- a/src/main/java/fr/univlille/iut/r304/thermo/Main.java +++ b/src/main/java/fr/univlille/iut/r304/thermo/Main.java @@ -1,20 +1,28 @@ package fr.univlille.iut.r304.thermo; import fr.univlille.iut.r304.thermo.model.Thermostat; +import fr.univlille.iut.r304.thermo.view.SliderView; import fr.univlille.iut.r304.thermo.view.TextView; import javafx.application.Application; + import javafx.stage.Stage; + +import java.awt.*; + public class Main extends Application { + Thermostat thermo = new Thermostat(); + public static void main(String[] args) { launch(args); } + @Override public void start(Stage primaryStage) throws Exception { - Thermostat thermo = new Thermostat(); new TextView(thermo); + new SliderView(thermo); } } 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 9d86f76..e83cdbc 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,29 +1,27 @@ package fr.univlille.iut.r304.thermo.model; +import fr.univlille.iut.r304.utils.*; -public class Thermostat implements ITemperature { +public class Thermostat extends ConnectableProperty implements ITemperature{ + + private double temperature; @Override public void setTemperature(double d) { - // TODO Auto-generated method stub - + this.temperature = d; } @Override public Double getTemperature() { - // TODO Auto-generated method stub - return null; + return this.temperature; } @Override public void incrementTemperature() { - // TODO Auto-generated method stub - + this.setTemperature(this.getTemperature() + 1); } @Override public void decrementTemperature() { - // TODO Auto-generated method stub - + this.setTemperature(this.getTemperature() - 1); } - } diff --git a/src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java b/src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java new file mode 100644 index 0000000..a5a86d6 --- /dev/null +++ b/src/main/java/fr/univlille/iut/r304/thermo/view/SliderView.java @@ -0,0 +1,97 @@ +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.Observable; +import fr.univlille.iut.r304.utils.Observer; +import javafx.geometry.Orientation; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.Slider; +import javafx.scene.control.TextField; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; +import javafx.stage.Stage; + +public class SliderView extends Stage implements ITemperatureView, Observer{ + + private static final String TITLE = "Thermostat"; + protected Thermostat model; + protected boolean wasUpdated = false; + Slider slider = new Slider(0, 100, 0); + + public SliderView(Thermostat model) { + this.model = model; + model.attach(this); + + + + Stage primaryStage = new Stage(); + VBox root = new VBox(); + Scene scene = new Scene(root, 300, 200); + primaryStage.setScene(scene); + primaryStage.setTitle(TITLE); + + Button incrementButton = new Button("+"); + Button decrementButton = new Button("-"); + + slider.setOrientation(Orientation.VERTICAL); + slider.setShowTickLabels(true); + + + slider.valueProperty().addListener((observable, oldValue, newValue) -> { + newValue = (int) Math.round(newValue.doubleValue()); + model.setTemperature(newValue.doubleValue()); + model.notifyObservers(model.getTemperature()); + }); + + incrementButton.setOnAction(e -> { + model.setTemperature(model.getTemperature() + 5); + model.notifyObservers(model.getTemperature()); + }); + + decrementButton.setOnAction(e -> { + model.setTemperature(model.getTemperature() -5); + model.notifyObservers(model.getTemperature()); + }); + + root.getChildren().addAll(incrementButton, slider, decrementButton); + root.setAlignment(Pos.CENTER); + + primaryStage.show(); + } + + @Override + public double getDisplayedValue() { + return model.getTemperature(); + } + + @Override + public void incrementAction() { + model.incrementTemperature(); + } + + @Override + public void decrementAction() { + model.decrementTemperature(); + } + + public void update(Observable o) { + if (o instanceof Thermostat) { + wasUpdated = true; + } + } + + public void update(Observable o, Object arg) { + if (o instanceof Thermostat) { + wasUpdated = true; + if (arg instanceof Double) { + System.out.println("Temperature : " + arg); + slider.setValue((double) arg); + } + } + } + +} 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 4faa759..5828a6e 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,32 +1,100 @@ 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.Observable; +import fr.univlille.iut.r304.utils.Observer; +import javafx.geometry.Pos; +import javafx.scene.Scene; +import javafx.scene.control.Button; +import javafx.scene.control.TextField; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; import javafx.stage.Stage; -public class TextView extends Stage implements ITemperatureView { +public class TextView extends Stage implements ITemperatureView, Observer{ + + private static final String TITLE = "Thermostat"; + protected Thermostat model; + protected boolean wasUpdated = false; + protected TextField temperatureField = new TextField(); public TextView(Thermostat model) { - //simplement pour avoir qqch qui s'affiche à la prise en main du dépôt - this.setTitle("Thermostat"); - this.show(); + this.model = model; + model.attach(this); + + Stage primaryStage = new Stage(); + VBox root = new VBox(); + HBox hbox = new HBox(); + Scene scene = new Scene(root, 300, 200); + primaryStage.setScene(scene); + primaryStage.setTitle(TITLE); + + Text text = new Text("Température en Celsius"); + temperatureField.setText(this.getDisplayedValue() + "°C"); + Button incrementButton = new Button("+"); + Button decrementButton = new Button("-"); + + temperatureField.setOnAction(e -> { + try { + double newTemp = Double.parseDouble(temperatureField.getText().substring(0, temperatureField.getText().length() - 2)); + model.setTemperature(newTemp); + temperatureField.setText(this.getDisplayedValue() + "°C"); + model.notifyObservers(model.getTemperature()); + } catch (NumberFormatException ex) { + temperatureField.setText("0°C"); + } + }); + + incrementButton.setOnAction(e -> { + model.incrementTemperature(); + temperatureField.setText(this.getDisplayedValue() + "°C"); + model.notifyObservers(model.getTemperature()); + }); + + decrementButton.setOnAction(e -> { + model.decrementTemperature(); + temperatureField.setText(this.getDisplayedValue() + "°C"); + model.notifyObservers(model.getTemperature()); + }); + + hbox.getChildren().addAll(decrementButton, temperatureField, incrementButton); + hbox.setAlignment(Pos.CENTER); + root.getChildren().addAll(text, hbox); + root.setAlignment(Pos.CENTER); + primaryStage.show(); } @Override public double getDisplayedValue() { - // TODO Auto-generated method stub - return 0; + return model.getTemperature(); } @Override public void incrementAction() { - // TODO Auto-generated method stub - + model.incrementTemperature(); } @Override public void decrementAction() { - // TODO Auto-generated method stub - + model.decrementTemperature(); + } + + public void update(Observable o) { + if (o instanceof Thermostat) { + wasUpdated = true; + } + } + + public void update(Observable o, Object arg) { + if (o instanceof Thermostat) { + wasUpdated = true; + if (arg instanceof Double) { + System.out.println("Temperature : " + arg); + temperatureField.setText(arg + "°C"); + } + } } } diff --git a/src/main/java/fr/univlille/iut/r304/utils/Observable.java b/src/main/java/fr/univlille/iut/r304/utils/Observable.java index c2445c7..361ccc3 100644 --- a/src/main/java/fr/univlille/iut/r304/utils/Observable.java +++ b/src/main/java/fr/univlille/iut/r304/utils/Observable.java @@ -22,7 +22,7 @@ public abstract class Observable { } } - protected void notifyObservers(Object data) { + public void notifyObservers(Object data) { this.updateList(); for (Observer o : attached) { o.update(this, data); -- GitLab