diff --git a/out/production/Capteur/fxml/ImageWindow.fxml b/out/production/Capteur/fxml/ImageWindow.fxml index 346fc80..1bf5289 100644 --- a/out/production/Capteur/fxml/ImageWindow.fxml +++ b/out/production/Capteur/fxml/ImageWindow.fxml @@ -5,48 +5,67 @@ - + - - + + - + + - + + + + - - - - - - - - - - - + + + + - + - + + + + + diff --git a/out/production/Capteur/launcher/Console.class b/out/production/Capteur/launcher/Console.class index 57648dd..151a3e0 100644 Binary files a/out/production/Capteur/launcher/Console.class and b/out/production/Capteur/launcher/Console.class differ diff --git a/out/production/Capteur/launcher/LaunchMeteo.class b/out/production/Capteur/launcher/LaunchMeteo.class index 11edb21..df1cd41 100644 Binary files a/out/production/Capteur/launcher/LaunchMeteo.class and b/out/production/Capteur/launcher/LaunchMeteo.class differ diff --git a/out/production/Capteur/model/Capteur.class b/out/production/Capteur/model/Capteur.class index 6099dd2..5ea05fd 100644 Binary files a/out/production/Capteur/model/Capteur.class and b/out/production/Capteur/model/Capteur.class differ diff --git a/out/production/Capteur/model/Thread.class b/out/production/Capteur/model/Thread.class deleted file mode 100644 index 74ff14a..0000000 Binary files a/out/production/Capteur/model/Thread.class and /dev/null differ diff --git a/out/production/Capteur/view/AfficheurTemperature.class b/out/production/Capteur/view/AfficheurTemperature.class index 5561adb..065ab91 100644 Binary files a/out/production/Capteur/view/AfficheurTemperature.class and b/out/production/Capteur/view/AfficheurTemperature.class differ diff --git a/out/production/Capteur/view/ImageWindow.class b/out/production/Capteur/view/ImageWindow.class index aee12fa..ed224ca 100644 Binary files a/out/production/Capteur/view/ImageWindow.class and b/out/production/Capteur/view/ImageWindow.class differ diff --git a/out/production/Capteur/view/MainWindow.class b/out/production/Capteur/view/MainWindow.class index 307724d..effdd16 100644 Binary files a/out/production/Capteur/view/MainWindow.class and b/out/production/Capteur/view/MainWindow.class differ diff --git a/out/production/Capteur/view/SaisiseurTemperature.class b/out/production/Capteur/view/SaisiseurTemperature.class index 710da95..5d0a442 100644 Binary files a/out/production/Capteur/view/SaisiseurTemperature.class and b/out/production/Capteur/view/SaisiseurTemperature.class differ diff --git a/out/production/Capteur/view/SpinnerWindow.class b/out/production/Capteur/view/SpinnerWindow.class index 3038af9..851aa15 100644 Binary files a/out/production/Capteur/view/SpinnerWindow.class and b/out/production/Capteur/view/SpinnerWindow.class differ diff --git a/out/production/Capteur/view/Visualisateur.class b/out/production/Capteur/view/Visualisateur.class index a90741d..a6e5636 100644 Binary files a/out/production/Capteur/view/Visualisateur.class and b/out/production/Capteur/view/Visualisateur.class differ diff --git a/resource/fxml/DetailWindow.fxml b/resource/fxml/DetailWindow.fxml new file mode 100644 index 0000000..77e3a86 --- /dev/null +++ b/resource/fxml/DetailWindow.fxml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resource/fxml/DetailZoneWindow.fxml b/resource/fxml/DetailZoneWindow.fxml new file mode 100644 index 0000000..1b74080 --- /dev/null +++ b/resource/fxml/DetailZoneWindow.fxml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resource/fxml/ImageWindow.fxml b/resource/fxml/ImageWindow.fxml index 346fc80..1bf5289 100644 --- a/resource/fxml/ImageWindow.fxml +++ b/resource/fxml/ImageWindow.fxml @@ -5,48 +5,67 @@ - + - - + + - + + - + + + + - - - - - - - - - - - + + + + - + - + + + + + diff --git a/src/launcher/Console.java b/src/launcher/Console.java index 5eb98cc..63dac69 100644 --- a/src/launcher/Console.java +++ b/src/launcher/Console.java @@ -5,8 +5,6 @@ import model.GenerateurAleatoire; import view.AfficheurTemperature; import view.SaisiseurTemperature; -import java.util.Random; - public class Console { public static void main(String[] args) { GenerateurAleatoire ga = new GenerateurAleatoire(-5,40); diff --git a/src/launcher/LaunchMeteo.java b/src/launcher/LaunchMeteo.java index 95ffea5..c174d52 100644 --- a/src/launcher/LaunchMeteo.java +++ b/src/launcher/LaunchMeteo.java @@ -16,7 +16,7 @@ public class LaunchMeteo extends Application { Parent root = FXMLLoader.load(getClass().getResource("/fxml/MainWindow.fxml")); Scene scene = new Scene(root); primaryStage.setScene(scene); - primaryStage.setTitle("Title"); + primaryStage.setTitle("Capteur JavaFX"); primaryStage.show(); } diff --git a/src/model/Capteur.java b/src/model/Capteur.java index 1ef99ba..c75fe00 100644 --- a/src/model/Capteur.java +++ b/src/model/Capteur.java @@ -1,43 +1,34 @@ package model; +import javafx.application.Platform; import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import java.util.ArrayList; -public class Capteur extends Observable implements Runnable{ - private static int idActuel; - private int id; - private String nom; - private DoubleProperty temperature; -// private Thread thread; +public class Capteur extends CapteurAbstrait implements Runnable{ + private Thread thread; private GenerateurStrategy strategy; public Capteur(String nom, GenerateurStrategy strategy) { - this.id = idActuel; - idActuel += 1; - this.nom = nom; + super(nom); this.temperature = new SimpleDoubleProperty(strategy.genereTemperature()); - this.lesObservateurs = new ArrayList<>(); this.strategy = strategy; + if (strategy.getClass().getSimpleName().equals("GenerateurManuel")) { + this.thread = null; + } + else{ + startThread(); + } } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getNom() { - return nom; + public void startThread(){ + thread = new Thread(this); + thread.setDaemon(true); + thread.start(); } - - public void setNom(String nom) { - this.nom = nom; - this.notifier(); + public void stopThread(){ + thread.interrupt(); } public DoubleProperty getTemperature() { @@ -45,7 +36,7 @@ public class Capteur extends Observable implements Runnable{ } public void setTemperature(double temperature) { - this.temperature = new SimpleDoubleProperty(temperature); + this.temperature.set(temperature); this.notifier(); } @@ -55,6 +46,16 @@ public class Capteur extends Observable implements Runnable{ public void setStrategy(GenerateurStrategy strategy) { this.strategy = strategy; + if (thread != null){ + thread.interrupt(); + } + if (strategy.getClass().getSimpleName().equals("GenerateurManuel")) { + this.thread = null; + } + else{ + startThread(); + } + this.notifier(); } public void setGenerateur(GenerateurStrategy strategy){ @@ -62,6 +63,14 @@ public class Capteur extends Observable implements Runnable{ } @Override - public void run(){} - + public void run(){ + while (true) { + Platform.runLater(() -> setTemperature(this.strategy.genereTemperature())); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + } } diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java new file mode 100644 index 0000000..4d157c6 --- /dev/null +++ b/src/model/CapteurAbstrait.java @@ -0,0 +1,38 @@ +package model; + +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +import java.util.ArrayList; + +public abstract class CapteurAbstrait extends Observable { + protected static int idActuel; + protected int id; + protected StringProperty nom; + protected DoubleProperty temperature; + + public CapteurAbstrait(String nom) { + this.id = idActuel; + idActuel += 1; + this.nom = new SimpleStringProperty(nom); + this.lesObservateurs = new ArrayList<>(); + } + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public StringProperty getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = new SimpleStringProperty(nom); + this.notifier(); + } + public abstract DoubleProperty getTemperature(); +} diff --git a/src/model/CapteurZone.java b/src/model/CapteurZone.java new file mode 100644 index 0000000..19d1b5e --- /dev/null +++ b/src/model/CapteurZone.java @@ -0,0 +1,73 @@ +package model; + +import javafx.application.Platform; +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleDoubleProperty; +import javafx.beans.property.SimpleIntegerProperty; + +import java.util.ArrayList; + +public class CapteurZone extends CapteurAbstrait implements Runnable{ + private Thread thread; + private ArrayList lesCapteurs; + + public CapteurZone(String nom, ArrayList lesCapteurs) { + super(nom); + this.temperature = new SimpleDoubleProperty(0); + this.lesCapteurs = lesCapteurs; + thread = new Thread(this); + thread.setDaemon(true); + thread.start(); + calculTemperature(); + } + + @Override + public void run(){ + while (true) { + Platform.runLater(() -> calculTemperature()); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + } + + @Override + public DoubleProperty getTemperature() { + return this.temperature; + } + private void calculTemperature(){ + double temperature = 0; + for (Capteur capteur : lesCapteurs){ + temperature += capteur.getTemperature().get(); + } + this.temperature.set(temperature/lesCapteurs.size()); + } +// private void genereTemperature(){ +// for (Capteur capteur : lesCapteurs){ +// capteur.setTemperature(capteur.getStrategy().genereTemperature()); +// } +// calculTemperature(); +// this.notifier(); +// } + public void addCapteur(Capteur capteur){ + lesCapteurs.add(capteur); + calculTemperature(); + } + public void removeCapteur(Capteur capteur){ + lesCapteurs.remove(capteur); + calculTemperature(); + } + public ArrayList getLesCapteurs() { + return lesCapteurs; + } + public void setLesCapteurs(ArrayList lesCapteurs) { + this.lesCapteurs = lesCapteurs; + calculTemperature(); + } + public IntegerProperty getNbCapteurs(){ + return new SimpleIntegerProperty(lesCapteurs.size()); + } +} diff --git a/src/model/GenerateurAleatoire.java b/src/model/GenerateurAleatoire.java index 5a709b0..636e632 100644 --- a/src/model/GenerateurAleatoire.java +++ b/src/model/GenerateurAleatoire.java @@ -39,4 +39,4 @@ public class GenerateurAleatoire implements GenerateurStrategy{ temperature = bornInf+random.nextDouble(bornSup-bornInf); return temperature; } -} +} \ No newline at end of file diff --git a/src/model/GenerateurManuel.java b/src/model/GenerateurManuel.java new file mode 100644 index 0000000..91647fb --- /dev/null +++ b/src/model/GenerateurManuel.java @@ -0,0 +1,10 @@ +package model; + +import java.util.Random; + +public class GenerateurManuel implements GenerateurStrategy{ + @Override + public double genereTemperature() { + return 0; + } +} \ No newline at end of file diff --git a/src/model/GenerateurRealiste.java b/src/model/GenerateurRealiste.java new file mode 100644 index 0000000..3413b6c --- /dev/null +++ b/src/model/GenerateurRealiste.java @@ -0,0 +1,42 @@ +package model; + +import java.util.Random; + +public class GenerateurRealiste implements GenerateurStrategy{ + private double bornInf; + private double bornSup; + private double temperature; + + public GenerateurRealiste() { + Random random = new Random(); + this.bornInf = -20; + this.bornSup = 40; + this.temperature = bornInf+random.nextDouble(bornSup-bornInf); + } + + public double getBornInf() { + return bornInf; + } + + public void setBornInf(double bornInf) { + this.bornInf = bornInf; + } + + public double getBornSup() { + return bornSup; + } + + public void setBornSup(double bornSup) { + this.bornSup = bornSup; + } + + @Override + public double genereTemperature() { + Random random = new Random(); + double inf, sup; + inf = -2; + sup = 2; + this.temperature += inf+random.nextDouble(sup-inf); + return this.temperature; + } +} \ No newline at end of file diff --git a/src/model/Thread.java b/src/model/Thread.java deleted file mode 100644 index 6250eb8..0000000 --- a/src/model/Thread.java +++ /dev/null @@ -1,4 +0,0 @@ -package model; - -public class Thread { -} diff --git a/src/view/DetailWindow.java b/src/view/DetailWindow.java new file mode 100644 index 0000000..a7b1963 --- /dev/null +++ b/src/view/DetailWindow.java @@ -0,0 +1,120 @@ +package view; + +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.stage.Stage; +import javafx.util.converter.NumberStringConverter; +import model.Capteur; +import model.GenerateurAleatoire; +import model.GenerateurManuel; +import model.GenerateurRealiste; + +import java.io.IOException; + +public class DetailWindow extends Visualisateur{ + @FXML + private Label nom; + @FXML + private Label id; + @FXML + private Label temperature; + @FXML + private Label strategy; + @FXML + private Button btnSpinner; + @FXML + private Button btnImage; + @FXML + private Button btnModifier; + @FXML + private TextField textFieldNom; + @FXML + private MenuButton menuStrategy; + @FXML + private MenuItem menuStrategyRandom; + protected Capteur capteur; + private GridPane layout; + + public DetailWindow(Capteur capteur) throws IOException { + this.capteur = capteur; + Stage stage = new Stage(); + layout = new GridPane(); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DetailWindow.fxml")); + loader.setRoot(this.layout); + loader.setController(this); + Parent root = loader.load(); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.setTitle(this.capteur.getNom().toString()); + stage.show(); + } + @FXML + public void initialize(){ + id.setText(new NumberStringConverter().toString(capteur.getId())); + nom.textProperty().bindBidirectional(this.capteur.getNom()); + String strategyName = this.capteur.getStrategy().getClass().getSimpleName(); + strategy.setText(strategyName); + if (! strategyName.equals("GenerateurManuel")){ + btnSpinner.setDisable(true); + } + temperature.textProperty().bindBidirectional(this.capteur.getTemperature() , new NumberStringConverter()); + } + + @FXML + private void clickButtonImage() throws Exception{ + ImageWindow Iw = new ImageWindow(this.capteur); + } + @FXML + private void clickButtonSpinner() throws Exception{ + SpinnerWindow Sw = new SpinnerWindow(this.capteur); + } + @FXML + private void clickButtonModifier() throws Exception{ + if (nom.isVisible() && strategy.isVisible()) { + textFieldNom.setText(nom.getText()); + textFieldNom.setVisible(true); + nom.setVisible(false); + menuStrategy.setText(strategy.getText()); + menuStrategy.setVisible(true); + } else { + nom.setText(textFieldNom.getText()); + String strategyName = menuStrategy.getText(); + if (strategyName.equals("GenerateurAleatoire")){ + this.capteur.setStrategy(new GenerateurAleatoire(-20,40)); + strategy.setText("GenerateurAleatoire"); + } else if (strategyName.equals("GenerateurRealiste")){ + this.capteur.setStrategy(new GenerateurRealiste()); + strategy.setText("GenerateurRealiste"); + } + else if (strategyName.equals("GenerateurManuel")){ + this.capteur.setStrategy(new GenerateurManuel()); + strategy.setText("GenerateurManuel"); + btnSpinner.setDisable(false); + } + textFieldNom.setVisible(false); + menuStrategy.setVisible(false); + nom.setVisible(true); + } + } + @FXML + private void clickMenuStrategyRandom() throws Exception{ + menuStrategy.setText("GenerateurAleatoire"); + } + @FXML + private void clickMenuStrategyReal() throws Exception{ + menuStrategy.setText("GenerateurRealiste"); + } + @FXML + private void clickMenuStrategyMan() throws Exception{ + menuStrategy.setText("GenerateurManuel"); + } + + @Override + public void update() { + temperature.textProperty().bindBidirectional(this.capteur.getTemperature() , new NumberStringConverter()); + } +} diff --git a/src/view/DetailZoneWindow.java b/src/view/DetailZoneWindow.java new file mode 100644 index 0000000..57b3af4 --- /dev/null +++ b/src/view/DetailZoneWindow.java @@ -0,0 +1,110 @@ +package view; + +import javafx.beans.property.SimpleStringProperty; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.stage.Stage; +import javafx.util.Callback; +import javafx.util.converter.NumberStringConverter; +import model.*; + +import java.io.IOException; + +public class DetailZoneWindow extends Visualisateur{ + private CapteurZone capteurZone; + private ObservableList lesCapteurs; + private GridPane layout; + @FXML + private Label nom; + @FXML + private Label id; + @FXML + private Label nbCapteurs; + @FXML + private Label temperature; + @FXML + private Button btnImage; + @FXML + private Button btnAjouter; + @FXML + private ListView listView; + + public DetailZoneWindow(CapteurZone capteurZone) throws IOException { + this.capteurZone = capteurZone; + Stage stage = new Stage(); + layout = new GridPane(); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DetailZoneWindow.fxml")); + loader.setRoot(this.layout); + loader.setController(this); + Parent root = loader.load(); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.setTitle("this.capteur.getNom().toString()"); + stage.show(); + } + @FXML + public void initialize(){ + id.setText(new NumberStringConverter().toString(capteurZone.getId())); + nom.textProperty().bindBidirectional(this.capteurZone.getNom()); + nbCapteurs.textProperty().bindBidirectional(this.capteurZone.getNbCapteurs(), new NumberStringConverter()); + temperature.textProperty().bindBidirectional(this.capteurZone.getTemperature() , new NumberStringConverter()); + + lesCapteurs = listView.getItems(); + + listView.setCellFactory(new Callback, ListCell>() { + @Override + public ListCell call(ListView capteurListView) { + return new ListCell(){ + @Override + public void updateItem(CapteurAbstrait value, boolean empty) { + super.updateItem(value, empty); + if (value != null) { + textProperty().bind(new SimpleStringProperty(this, "", "") + .concat("[") + .concat(value.getId()) + .concat("] ") + .concat(value.getNom()) + .concat(" : ") + .concat(value.getTemperature().asString("%.2f°C"))); + } + } + }; + } + }); + + listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + try { + if (lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()).getClass().getSimpleName().equals("CapteurZone")) { + DetailZoneWindow Dzw = new DetailZoneWindow((CapteurZone) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + else{ + DetailWindow Dw = new DetailWindow((Capteur) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + lesCapteurs.addAll(capteurZone.getLesCapteurs()); + } + @FXML + private void clickButtonImage() throws Exception{ + ImageWindow Iw = new ImageWindow(this.capteurZone); + } + + @FXML + private void clickButtonAjouter() throws Exception{ + Capteur c = new Capteur("Nouveau Capteur Réaliste", new GenerateurRealiste()); + this.capteurZone.addCapteur(c); + lesCapteurs.add(c); + } + + @Override + public void update() { + } +} diff --git a/src/view/ImageWindow.java b/src/view/ImageWindow.java index cab55de..322badc 100644 --- a/src/view/ImageWindow.java +++ b/src/view/ImageWindow.java @@ -1,31 +1,39 @@ package view; -import javafx.beans.property.Property; +import javafx.beans.property.SimpleObjectProperty; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Label; -import javafx.scene.layout.BorderPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.converter.NumberStringConverter; import model.Capteur; -import model.GenerateurAleatoire; +import model.CapteurAbstrait; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; public class ImageWindow extends Visualisateur{ - private Capteur capteur; - private GridPane layout; + private final CapteurAbstrait capteur; @FXML private Label temperature; - - public ImageWindow(Capteur capteur) throws IOException { + @FXML + private Label nom; + @FXML + private Label id; + @FXML + private ImageView imageView; + public ImageWindow(CapteurAbstrait capteur) throws IOException { this.capteur = capteur; Stage stage = new Stage(); - layout = new GridPane(); + GridPane layout = new GridPane(); FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ImageWindow.fxml")); - loader.setRoot(this.layout); + loader.setRoot(layout); loader.setController(this); Parent root = loader.load(); Scene scene = new Scene(root); @@ -33,14 +41,30 @@ public class ImageWindow extends Visualisateur{ stage.setTitle("Image"); stage.show(); } - + private void initializeAndUpdate() { + id.setText(new NumberStringConverter().toString(capteur.getId())); + nom.textProperty().bind(this.capteur.getNom()); + temperature.textProperty().bindBidirectional(this.capteur.getTemperature() , new NumberStringConverter()); + this.capteur.getTemperature().addListener((observable, oldValue, newValue) -> { + try { + if ((Double)newValue < 0) { + imageView.setImage(new Image(new FileInputStream("resource/Image/Froid.png"))); + } else if ((Double)newValue > 22) { + imageView.setImage(new Image(new FileInputStream("resource/Image/Chaud.png"))); + } else { + imageView.setImage(new Image(new FileInputStream("resource/Image/Normal.png"))); + } + } + catch (FileNotFoundException ignored){} + }); + } @FXML public void initialize(){ - temperature.textProperty().bindBidirectional(this.capteur.getTemperature(), new NumberStringConverter()); + initializeAndUpdate(); } @Override public void update() { - temperature.textProperty().bindBidirectional(this.capteur.getTemperature(), new NumberStringConverter()); + initializeAndUpdate(); } } diff --git a/src/view/MainWindow.java b/src/view/MainWindow.java index 78980c5..2b5d0d5 100644 --- a/src/view/MainWindow.java +++ b/src/view/MainWindow.java @@ -1,39 +1,118 @@ package view; +import javafx.beans.property.SimpleStringProperty; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; import javafx.scene.control.Button; -import javafx.scene.layout.GridPane; -import javafx.stage.Stage; -import model.Capteur; -import model.GenerateurAleatoire; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.util.Callback; +import model.*; -public class MainWindow { +import java.io.IOException; +import java.text.DecimalFormat; +import java.util.ArrayList; + +public class MainWindow extends Visualisateur{ + @FXML + private ListView listView; + @FXML + private Button btnAjouter; @FXML - private Button btnSpinner; + private Button btnAjouterZone; @FXML - private Button btnImage; + private Button btnVoir; @FXML - private Button btnFermer; - protected Capteur capteur; + private Button btnSupprimer; + private ObservableList lesCapteurs; + private final DecimalFormat df = new DecimalFormat("#.##"); - public void initialize(){ - this.capteur = new Capteur("a", new GenerateurAleatoire(0,12)); - } @FXML - private void clickButtonFermer(){ - Stage stage = (Stage) btnFermer.getScene().getWindow(); - stage.close(); + public void initialize(){ + lesCapteurs = listView.getItems(); + + listView.setCellFactory(new Callback, ListCell>() { + @Override + public ListCell call(ListView capteurListView) { + return new ListCell(){ + @Override + public void updateItem(CapteurAbstrait value, boolean empty) { + super.updateItem(value, empty); + if (value != null) { + textProperty().bind(new SimpleStringProperty(this, "", "") + .concat("[") + .concat(value.getId()) + .concat("] ") + .concat(value.getNom()) + .concat(" : ") + .concat(value.getTemperature().asString("%.2f°C"))); + } + } + }; + } + }); + + listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { +// btnVoir.setDisable(false); +// btnSupprimer.setDisable(false); + try { + if (lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()).getClass().getSimpleName().equals("CapteurZone")) { + DetailZoneWindow Dzw = new DetailZoneWindow((CapteurZone) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + else{ + DetailWindow Dw = new DetailWindow((Capteur) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + Capteur capteur1 = new Capteur("Capteur Réaliste", new GenerateurRealiste()); + Capteur capteur2 = new Capteur("Capteur Aléatoire", new GenerateurAleatoire(-20, 40)); + Capteur capteur3 = new Capteur("Capteur Manuel", new GenerateurManuel()); + lesCapteurs.add(capteur1); + lesCapteurs.add(capteur2); + lesCapteurs.add(capteur3); + + Capteur capteur4 = new Capteur("Capteur4", new GenerateurRealiste()); + Capteur capteur5 = new Capteur("Capteur5", new GenerateurRealiste()); + CapteurZone capteurZone = new CapteurZone("Capteur Zone", new ArrayList(){{add(capteur4); add(capteur5);}}); + lesCapteurs.add(capteurZone); } @FXML - private void clickButtonImage() throws Exception{ - ImageWindow Iw = new ImageWindow(this.capteur); + private void clickButtonAjouter() throws Exception{ + Capteur c = new Capteur("Nouveau Capteur Réaliste", new GenerateurRealiste()); + lesCapteurs.add(c); } @FXML - private void clickButtonSpinner() throws Exception{ - SpinnerWindow Sw = new SpinnerWindow(this.capteur); + private void clickButtonAjouterZone() throws Exception{ + CapteurZone c = new CapteurZone("Nouveau Capteur Zone", new ArrayList()); + lesCapteurs.add(c); + } +// @FXML +// private void clickButtonSupprimer() throws Exception{ +// CapteurAbstrait c = lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()); +// lesCapteurs.remove(c); +// listView.getItems().remove(c); +// listView.refresh(); +// } +// @FXML +// private void clickButtonVoir() throws Exception{ +// try { +// if (lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()).getClass().getSimpleName().equals("CapteurZone")) { +// DetailZoneWindow Dzw = new DetailZoneWindow((CapteurZone) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); +// } +// else{ +// DetailWindow Dw = new DetailWindow((Capteur) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); +// } +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// } + @Override + public void update() { + listView.refresh(); } } diff --git a/src/view/SpinnerWindow.java b/src/view/SpinnerWindow.java index 06a67b0..7e08e05 100644 --- a/src/view/SpinnerWindow.java +++ b/src/view/SpinnerWindow.java @@ -1,13 +1,12 @@ package view; -import javafx.beans.property.IntegerProperty; -import javafx.beans.property.ObjectProperty; -import javafx.beans.property.SimpleObjectProperty; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.Label; import javafx.scene.control.Spinner; +import javafx.scene.control.SpinnerValueFactory; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.converter.NumberStringConverter; @@ -18,6 +17,10 @@ import java.io.IOException; public class SpinnerWindow extends Visualisateur{ @FXML private Spinner spinner; + @FXML + private Label nom; + @FXML + private Label id; protected Capteur capteur; private GridPane layout; @@ -36,7 +39,13 @@ public class SpinnerWindow extends Visualisateur{ } @FXML public void initialize(){ + double min, max; + min = -20.0; + max = 40.0; + spinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(min,max)); spinner.getValueFactory().valueProperty().bindBidirectional(this.capteur.getTemperature()); + id.setText(new NumberStringConverter().toString(capteur.getId())); + nom.textProperty().bind(this.capteur.getNom()); } @Override diff --git a/src/view/Visualisateur.java b/src/view/Visualisateur.java index df5ee6d..4b487c9 100644 --- a/src/view/Visualisateur.java +++ b/src/view/Visualisateur.java @@ -1,14 +1,19 @@ package view; + import javafx.fxml.FXML; +import javafx.scene.control.Button; import javafx.stage.Stage; import model.Capteur; import model.Observateur; public abstract class Visualisateur implements Observateur { - private void clickFermer(){ -// Stage stage = (Stage) .getScene().getWindow(); -// stage.close(); + @FXML + private Button btnFermer; + @FXML + protected void clickButtonFermer(){ + Stage stage = (Stage) btnFermer.getScene().getWindow(); + stage.close(); } private void intialize (Capteur c){ c.addObservateur(this);