Skip to content
Snippets Groups Projects
Commit 54a10a2e authored by Yvan Serikoff's avatar Yvan Serikoff
Browse files

fin TP4

parent 5f0487ef
No related branches found
No related tags found
No related merge requests found
package fr.univlille.iut.r304.thermo; package fr.univlille.iut.r304.thermo;
import fr.univlille.iut.r304.thermo.model.Thermostat; 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 fr.univlille.iut.r304.thermo.view.TextView;
import javafx.application.Application; import javafx.application.Application;
import javafx.stage.Stage; import javafx.stage.Stage;
import java.awt.*;
public class Main extends Application { public class Main extends Application {
Thermostat thermo = new Thermostat();
public static void main(String[] args) { public static void main(String[] args) {
launch(args); launch(args);
} }
@Override @Override
public void start(Stage primaryStage) throws Exception { public void start(Stage primaryStage) throws Exception {
Thermostat thermo = new Thermostat();
new TextView(thermo); new TextView(thermo);
new SliderView(thermo);
} }
} }
package fr.univlille.iut.r304.thermo.model; 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 @Override
public void setTemperature(double d) { public void setTemperature(double d) {
// TODO Auto-generated method stub this.temperature = d;
} }
@Override @Override
public Double getTemperature() { public Double getTemperature() {
// TODO Auto-generated method stub return this.temperature;
return null;
} }
@Override @Override
public void incrementTemperature() { public void incrementTemperature() {
// TODO Auto-generated method stub this.setTemperature(this.getTemperature() + 1);
} }
@Override @Override
public void decrementTemperature() { public void decrementTemperature() {
// TODO Auto-generated method stub this.setTemperature(this.getTemperature() - 1);
} }
} }
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);
}
}
}
}
package fr.univlille.iut.r304.thermo.view; package fr.univlille.iut.r304.thermo.view;
import fr.univlille.iut.r304.thermo.model.Thermostat; 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; 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) { public TextView(Thermostat model) {
//simplement pour avoir qqch qui s'affiche à la prise en main du dépôt this.model = model;
this.setTitle("Thermostat"); model.attach(this);
this.show();
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 @Override
public double getDisplayedValue() { public double getDisplayedValue() {
// TODO Auto-generated method stub return model.getTemperature();
return 0;
} }
@Override @Override
public void incrementAction() { public void incrementAction() {
// TODO Auto-generated method stub model.incrementTemperature();
} }
@Override @Override
public void decrementAction() { 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");
}
}
} }
} }
...@@ -22,7 +22,7 @@ public abstract class Observable { ...@@ -22,7 +22,7 @@ public abstract class Observable {
} }
} }
protected void notifyObservers(Object data) { public void notifyObservers(Object data) {
this.updateList(); this.updateList();
for (Observer o : attached) { for (Observer o : attached) {
o.update(this, data); o.update(this, data);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment