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 SUPPRESSION_OISEAU = "Oiseau_supprime";
public static final String AJOUT_OISEAU = "Oiseau_ajoute";
public ManagerOiseau() {
dateDuJour = LocalDate.now();
oiseaux = new ArrayList<>();
@ -49,11 +53,16 @@ public class ManagerOiseau {
}
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){
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){
@ -65,7 +74,9 @@ public class ManagerOiseau {
}
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() {

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

@ -10,6 +10,7 @@ import javafx.collections.ObservableList;
import modele.metier.ManagerOiseau;
import modele.metier.oiseaux.Oiseau;
import java.beans.IndexedPropertyChangeEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.IOException;
@ -30,7 +31,7 @@ public class ManagerOiseauVM implements PropertyChangeListener {
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);
public ObservableList<OiseauVM> getListeOiseaux() { return listeOiseaux.get(); }
public ListProperty<OiseauVM> listeOiseauxProperty() { return listeOiseaux; }
@ -53,6 +54,7 @@ public class ManagerOiseauVM implements PropertyChangeListener {
for(Oiseau oiseau : modele.getOiseaux()){
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());
modele.addListener(this);
@ -63,24 +65,25 @@ public class ManagerOiseauVM implements PropertyChangeListener {
}
public void addOiseau(String nom, int age, String couleurAiles){
OiseauVM oiseauVM = new OiseauVM(nom, age, couleurAiles);
Oiseau oiseau = oiseauVM.getModele();
modele.addOiseau(oiseau.getNom(), oiseau.getAge(), oiseau.getCouleurAiles());
oiseauxObs.add(oiseauVM);
modele.addOiseau(nom, age, couleurAiles);
}
public void supprimerOiseau(OiseauVM oiseau) {
modele.supprimerOiseau(oiseau.getModele());
oiseauxObs.remove(oiseau);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
switch (evt.getPropertyName()){
case ManagerOiseau.PROP_DATE_DU_JOUR:
case ManagerOiseau.PROP_DATE_DU_JOUR: // date du jour qui change
setDateDuJour((LocalDate) evt.getNewValue());
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) {
this.modele = modele;
// première initialisation des propriétés
setNom(modele.getNom());
setAge(modele.getAge());
setCouleurAiles(modele.getCouleurAiles());
setEtat(modele.getEtat());
setDateDernierRepas(modele.getDateDernierRepas());
modele.ajouterListener(this);
modele.ajouterListener(this); // écoute les modifications de son oiseau
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()));
boutonTuerOiseau.setDisable(false);
}
});
}
@ -80,14 +78,12 @@ public class MainWindow {
@FXML
private void ajouterOiseau() throws IOException {
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();
secondStage.initOwner(stage);
secondStage.initOwner(stage); // set sa fenêtre parent
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();
}
@FXML

Loading…
Cancel
Save