Skip to content
Snippets Groups Projects
Commit 738933ab authored by Charlie Darques's avatar Charlie Darques
Browse files

tp thermostat

parent 5f0487ef
No related branches found
No related tags found
No related merge requests found
......@@ -40,8 +40,11 @@ On ne s’occupera bien sûr pas des capteurs et de la température réelle ici,
On a donc un modèle et un affichage (vue + contrôleur) très simple.
**Q1** Quel affichage est nécessaire pour seulement régler la température désirée ?
> Il faut permettre de gérer la température soit avec un slider soit avec des flèches à cliquer soit avec une valeur à entrer directement
**Q2** Que devrait contenir le modèle de l’application ?
> Le modèle doit contenir les classes thermostat, température, les méthodes de notifications du thermostat et de changement de la température
> (donc ici l'observer est le thermostat et l'observable est la température)
Pour rappel, le modèle :
- Est indépendant de la (des) vue(s). Par exemple, pas de « import javafx » ;
......
package fr.univlille.iut.r304.thermo;
import fr.univlille.iut.r304.thermo.model.Temperature;
import fr.univlille.iut.r304.thermo.model.Thermostat;
import fr.univlille.iut.r304.thermo.view.TextView;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.geometry.Orientation;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.Slider;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
Label value;
Label sliderValue = new Label("");
@Override
public void start(Stage primaryStage) throws Exception {
Stage buttonsView = new Stage();
Stage sliderView = new Stage();
VBox buttonBox = new VBox();
VBox sliderBox = new VBox();
// buttonsView
Thermostat thermo = new Thermostat();
Temperature temp = new Temperature();
temp.attach(thermo);
new TextView(thermo);
Button bPlus = new Button(" + ");
bPlus.setMaxSize(50, 50);
Button bMinus = new Button(" - ");
bMinus.setMaxSize(50, 50);
value = new Label("" + temp.getDisplayedValue());
bPlus.setOnMouseClicked(e -> {
temp.incrementTemperature();
value.setText("" + temp.getDisplayedValue());
sliderValue.setText(value.getText());
});
bMinus.setOnMouseClicked(e -> {
temp.decrementTemperature();
value.setText("" + temp.getDisplayedValue());
sliderValue.setText(value.getText());
});
buttonBox.getChildren().add(value);
buttonBox.getChildren().addAll(bPlus, bMinus);
// slider view
Slider slider = new Slider(-10, 30, Thermostat.DEFAULT_TEMP);
slider.setBlockIncrement(1);
slider.setShowTickMarks(true);
slider.setShowTickLabels(true);
slider.setBlockIncrement(5);
slider.setOrientation(Orientation.VERTICAL);
slider.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
temp.setTemperature(slider.valueProperty().doubleValue());
temp.notifyObservers(temp.getTemperature());
t1 = temp.getDisplayedValue();
sliderValue.setText("" + t1);
value.setText("" + slider.valueProperty().doubleValue());
}
});
sliderBox.getChildren().addAll(slider, sliderValue);
// program
Scene scene = new Scene(buttonBox, 200, 200);
Scene scene2 = new Scene(sliderBox, 200, 200);
buttonsView.setScene(scene);
buttonsView.setTitle("Buttons view");
sliderView.setTitle("Slider view");
sliderView.setScene(scene2);
buttonsView.show();
sliderView.show();
}
}
package fr.univlille.iut.r304.thermo.model;
import fr.univlille.iut.r304.utils.Observable;
import fr.univlille.iut.r304.utils.Observer;
import java.util.ArrayList;
import java.util.List;
public class Temperature extends Observable implements ITemperature {
protected double temperature;
private List<Observer> observers;
public Temperature() {
this.temperature = Thermostat.DEFAULT_TEMP;
this.observers = new ArrayList<>();
}
@Override
public void setTemperature(double temp) {
this.temperature = temp;
}
@Override
public Double getTemperature() {
return temperature;
}
public Double getDisplayedValue() {
return temperature;
}
@Override
public void incrementTemperature() {
this.setTemperature(temperature +1);
this.notifyObservers(temperature);
}
@Override
public void decrementTemperature() {
this.setTemperature(temperature -1);
this.notifyObservers(temperature);
}
public void increaseTempByFive() {
this.setTemperature(temperature + 5);
this.notifyObservers(temperature);
}
public void decreaseTempByFive() {
this.setTemperature(temperature - 5);
this.notifyObservers(temperature);
}
public void attach(Observer obs) {
this.observers.add(obs);
}
public void detach(Observer obs) {
this.observers.remove(obs);
}
public void notifyObservers() {
for (Observer o : this.observers) {
o.update(this);
}
}
public void notifyObservers(Object obj) {
for (Observer o : this.observers) {
o.update(this, obj);
}
}
}
package fr.univlille.iut.r304.thermo.model;
public class Thermostat implements ITemperature {
import fr.univlille.iut.r304.thermo.view.ITemperatureView;
import fr.univlille.iut.r304.utils.Observable;
import fr.univlille.iut.r304.utils.Observer;
@Override
public void setTemperature(double d) {
// TODO Auto-generated method stub
public class Thermostat implements Observer, ITemperatureView {
private double temperature;
public static final int DEFAULT_TEMP = 18;
public Thermostat () {
this.temperature = DEFAULT_TEMP;
}
public void update(Observable obs) {
this.temperature = ((Temperature) obs).getTemperature();
}
@Override
public Double getTemperature() {
// TODO Auto-generated method stub
return null;
public void update(Observable obs, Object tmp) {
this.temperature = (Double) tmp;
}
@Override
public void incrementTemperature() {
// TODO Auto-generated method stub
public double getDisplayedValue() {
return temperature;
}
@Override
public void decrementTemperature() {
// TODO Auto-generated method stub
public void incrementAction() {
temperature++;
}
@Override
public void decrementAction() {
temperature--;
}
}
......@@ -2,5 +2,6 @@ module thermo {
requires javafx.controls;
requires javafx.swing;
opens fr.univlille.iut.r304.thermo;
opens fr.univlille.iut.r304.thermo.model;
}
\ No newline at end of file
package fr.univlille.iut.r304.thermo;
/* package fr.univlille.iut.r304.thermo;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
......@@ -19,7 +19,7 @@ public class TestThermostat {
/* JFXPanel is a component that initializes JavaFX without needing a javafx.application.Application
* We need it to be able to create a view but we don't need the attribute after that
*/
@SuppressWarnings("unused")
private JFXPanel fxPanel = new JFXPanel();
......@@ -30,7 +30,7 @@ public class TestThermostat {
public void setUp() {
view = null;
/* runLater is needed to let JavaFX initialize the view in its own thread
*/
Platform.runLater(new Runnable() {
@Override
public void run() {
......@@ -40,7 +40,7 @@ public class TestThermostat {
});
/* Because of runLater, we must wait until the window is actually created
*/
while (view == null) {
try {
Thread.sleep(100);
......@@ -84,4 +84,4 @@ public class TestThermostat {
assertEquals(17.0, model.getTemperature(), DELTA);
}
}
}*/
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment