Ajout et suppression fonctionnelle avec le fireIndexedPropertyChange

master
Louis PERRET 3 years ago
parent 7a17003124
commit 5a1180344f

Binary file not shown.

@ -31,6 +31,10 @@ public class ManagerOiseau {
public static final String PROP_DATE_DU_JOUR = "DateDuJour"; public static final String PROP_DATE_DU_JOUR = "DateDuJour";
public static final String SUPPRESSION_OISEAU = "Oiseau_supprime";
public static final String AJOUT_OISEAU = "Oiseau_ajoute";
public ManagerOiseau() { public ManagerOiseau() {
dateDuJour = LocalDate.now(); dateDuJour = LocalDate.now();
oiseaux = new ArrayList<>(); oiseaux = new ArrayList<>();
@ -49,11 +53,16 @@ public class ManagerOiseau {
} }
public void addOiseau(String nom, int age, String couleurAiles){ public void addOiseau(String nom, int age, String couleurAiles){
oiseaux.add(factoryOiseau.creerOiseau(nom, age, couleurAiles)); Oiseau oiseau = factoryOiseau.creerOiseau(nom, age, couleurAiles);
oiseaux.add(oiseau);
int index = oiseaux.size() - 1; // donc l'index d'ajout est nbOiseau - 1 (évite les index out of the bound)
support.fireIndexedPropertyChange(AJOUT_OISEAU, index, null, oiseau); // j'ajoute à la fin donc la oldValue est à null car y'avait pas d'oiseau avant à cet index là
} }
public void addOiseau(Oiseau oiseau){ public void addOiseau(Oiseau oiseau){
oiseaux.add(oiseau); oiseaux.add(oiseau); // j'ajoute à la fin
int index = oiseaux.size() - 1; // donc l'index d'ajout est nbOiseau - 1 (évite les index out of the bound)
support.fireIndexedPropertyChange(AJOUT_OISEAU, index, null, oiseau); // j'ajoute à la fin donc la oldValue est à null car y'avait pas d'oiseau avant à cet index là
} }
public void addListener(PropertyChangeListener listener){ public void addListener(PropertyChangeListener listener){
@ -65,7 +74,9 @@ public class ManagerOiseau {
} }
public void supprimerOiseau(Oiseau oiseau) { public void supprimerOiseau(Oiseau oiseau) {
oiseaux.remove(oiseau); int index = oiseaux.indexOf(oiseau);
oiseaux.remove(index);
support.fireIndexedPropertyChange(SUPPRESSION_OISEAU, index, oiseau, null);
} }
public LocalDate getDateDuJour() { public LocalDate getDateDuJour() {

@ -1,7 +1,5 @@
package modele.metier.oiseaux; package modele.metier.oiseaux;
import com.sun.webkit.LoadListenerClient;
import javafx.beans.property.*;
import modele.metier.etat.Affame; import modele.metier.etat.Affame;
import modele.metier.etat.Decede; import modele.metier.etat.Decede;
import modele.metier.etat.Etat; import modele.metier.etat.Etat;
@ -10,10 +8,8 @@ import modele.metier.etat.Rassasie;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport; import java.beans.PropertyChangeSupport;
import java.io.Serializable; import java.io.Serializable;
import java.sql.Array;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
public class Oiseau implements Serializable { public class Oiseau implements Serializable {

@ -10,6 +10,7 @@ import javafx.collections.ObservableList;
import modele.metier.ManagerOiseau; import modele.metier.ManagerOiseau;
import modele.metier.oiseaux.Oiseau; import modele.metier.oiseaux.Oiseau;
import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import java.io.IOException; import java.io.IOException;
@ -30,7 +31,7 @@ public class ManagerOiseauVM implements PropertyChangeListener {
public void setOiseauCourant(OiseauVM oiseauCourant) { this.oiseauCourant.set(oiseauCourant); } public void setOiseauCourant(OiseauVM oiseauCourant) { this.oiseauCourant.set(oiseauCourant); }
private ObservableList<OiseauVM> oiseauxObs = FXCollections.observableArrayList(); private ObservableList<OiseauVM> oiseauxObs = FXCollections.observableArrayList(); // envoie notif quand un des élémentscha
private ListProperty<OiseauVM> listeOiseaux = new SimpleListProperty<>(oiseauxObs); private ListProperty<OiseauVM> listeOiseaux = new SimpleListProperty<>(oiseauxObs);
public ObservableList<OiseauVM> getListeOiseaux() { return listeOiseaux.get(); } public ObservableList<OiseauVM> getListeOiseaux() { return listeOiseaux.get(); }
public ListProperty<OiseauVM> listeOiseauxProperty() { return listeOiseaux; } public ListProperty<OiseauVM> listeOiseauxProperty() { return listeOiseaux; }
@ -53,6 +54,7 @@ public class ManagerOiseauVM implements PropertyChangeListener {
for(Oiseau oiseau : modele.getOiseaux()){ for(Oiseau oiseau : modele.getOiseaux()){
oiseauxObs.add(new OiseauVM(oiseau)); oiseauxObs.add(new OiseauVM(oiseau));
//oiseauxObs.add(new OiseauVM(oiseau.getNom(), oiseau.getAge(), oiseau.getCouleurAiles())); // pb de référence si je fais ça
} }
setDateDuJour(modele.getDateDuJour()); setDateDuJour(modele.getDateDuJour());
modele.addListener(this); modele.addListener(this);
@ -63,24 +65,25 @@ public class ManagerOiseauVM implements PropertyChangeListener {
} }
public void addOiseau(String nom, int age, String couleurAiles){ public void addOiseau(String nom, int age, String couleurAiles){
OiseauVM oiseauVM = new OiseauVM(nom, age, couleurAiles); modele.addOiseau(nom, age, couleurAiles);
Oiseau oiseau = oiseauVM.getModele();
modele.addOiseau(oiseau.getNom(), oiseau.getAge(), oiseau.getCouleurAiles());
oiseauxObs.add(oiseauVM);
} }
public void supprimerOiseau(OiseauVM oiseau) { public void supprimerOiseau(OiseauVM oiseau) {
modele.supprimerOiseau(oiseau.getModele()); modele.supprimerOiseau(oiseau.getModele());
oiseauxObs.remove(oiseau);
} }
@Override @Override
public void propertyChange(PropertyChangeEvent evt) { public void propertyChange(PropertyChangeEvent evt) {
switch (evt.getPropertyName()){ switch (evt.getPropertyName()){
case ManagerOiseau.PROP_DATE_DU_JOUR: case ManagerOiseau.PROP_DATE_DU_JOUR: // date du jour qui change
setDateDuJour((LocalDate) evt.getNewValue()); setDateDuJour((LocalDate) evt.getNewValue());
break; break;
case ManagerOiseau.SUPPRESSION_OISEAU: // supprimer un oiseau
oiseauxObs.remove(((IndexedPropertyChangeEvent) evt).getIndex());
break;
case ManagerOiseau.AJOUT_OISEAU: // ajout d'un oiseau
oiseauxObs.add(((IndexedPropertyChangeEvent) evt).getIndex(), new OiseauVM((Oiseau)evt.getNewValue()));
break;
} }
} }

@ -40,12 +40,13 @@ public class OiseauVM implements PropertyChangeListener {
public OiseauVM(Oiseau modele) { public OiseauVM(Oiseau modele) {
this.modele = modele; this.modele = modele;
// première initialisation des propriétés
setNom(modele.getNom()); setNom(modele.getNom());
setAge(modele.getAge()); setAge(modele.getAge());
setCouleurAiles(modele.getCouleurAiles()); setCouleurAiles(modele.getCouleurAiles());
setEtat(modele.getEtat()); setEtat(modele.getEtat());
setDateDernierRepas(modele.getDateDernierRepas()); setDateDernierRepas(modele.getDateDernierRepas());
modele.ajouterListener(this); modele.ajouterListener(this); // écoute les modifications de son oiseau
nom.addListener((__,___,newV) -> modele.setNom(newV)); nom.addListener((__,___,newV) -> modele.setNom(newV));
} }

@ -67,8 +67,6 @@ public class MainWindow {
dateDernierRepas.textProperty().bind(Bindings.concat("Date du dernier repas : ", newV.dateDernierRepasProperty().asString())); dateDernierRepas.textProperty().bind(Bindings.concat("Date du dernier repas : ", newV.dateDernierRepasProperty().asString()));
boutonTuerOiseau.setDisable(false); boutonTuerOiseau.setDisable(false);
} }
}); });
} }
@ -80,14 +78,12 @@ public class MainWindow {
@FXML @FXML
private void ajouterOiseau() throws IOException { private void ajouterOiseau() throws IOException {
Scene scene = new Scene(FXMLLoader.load(getClass().getResource("/vues/AjouterOiseau.fxml"))); Scene scene = new Scene(FXMLLoader.load(getClass().getResource("/vues/AjouterOiseau.fxml")));
Stage secondStage = new Stage(); Stage secondStage = new Stage(); // stage de ma nouvelle fenêtre
Stage stage = (Stage)ajouterOiseau.getScene().getWindow(); Stage stage = (Stage)ajouterOiseau.getScene().getWindow();
secondStage.initOwner(stage); secondStage.initOwner(stage); // set sa fenêtre parent
secondStage.setScene(scene); secondStage.setScene(scene);
secondStage.initModality(Modality.WINDOW_MODAL); secondStage.initModality(Modality.WINDOW_MODAL); // préciser le type de fenêtre qu'on veut afficher, ici une fenêtre modale
secondStage.show(); secondStage.show();
} }
@FXML @FXML

Loading…
Cancel
Save