Utilisation du Pattern Observer en JavaFx (methode Start)

Messages postés
6
Date d'inscription
samedi 18 mai 2019
Statut
Membre
Dernière intervention
18 octobre 2019
-
Bonjour voilà je suis sur un mini projet en JavaFx . Je suis confronté à un problème sur lequel je ne trouves pas de solution "probant". Cela concerne l'utilisation du Pattern Observer, j'ai réussi à l'appliquer sur toute mes autres vues sauf sur la vue de démarrage (main + méthode start de la classe Application) . Ayant énormément de classe je me focaliserai que sur les 2 plus importante a savoir la vue principal et le contrôleurs :

Pour éviter d'avantage de confusion je ciblerais que la méthode effectuant l'insertion :
PersonControlleur.java
@FXML void Insertion (ActionEvent event) {
  try {
  Person personne = new Perso(nom.getText(), prenom.getText(), age.getText());
   /* Insertion dans de la Person dans la BD (La couche service contient tout mes objets DAO 
                         et mes methode du Pattern Observer*/
   String nom = service.getPersonneDAO().insert(personne);
   // Notification d'un changement 
   service.notifyPersonneObservers(personne);
   // Si tout test OK on ferme la fenêtre
   Stage stage = (Stage) btAjout.getScene().getWindow();
   stage.close();
  }  catch (Exception e) {
   e.printStackTrace();
  }
 }


Voici ma vu principal :


import model.Person;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.converter.DoubleStringConverter;
import javafx.util.converter.IntegerStringConverter;

public class mainApp extends Application implements Observer {

    public static void main(String[] args) {
        launch(args);
    }
       // Avoir accès à mon Objet DAO
    private IPersonnelDAO personneDAO;
      // construire ma couche service pour l'application du Pattern Observer
 private Service service;
        private TableColumn<Person, String> tbNom;
        private TableColumn<Person, Sting> tbPrenom;
        private TableColumn<Person, Integer> tbAge; 
 private Button btInsertion; 
 private ObservableList<Person> loPersonne;
        private TableView<Person> tbPersonne;
 // Conteneur principal de la vue principale
 private BorderPane borderPane;
    @Override public void start(Stage primaryStage) {
         
        borderPane = new BorderPane();
 //Initialisation de l'objet Service
 service = new Service();
       personneDAO = service.getPersonneDAO();
       // S'enregistre sur la couche Service pour écouter l'ajout ou suppression d'un Personnel
      service.addObjectObserver(this);

      /*Affiche la vue pour l'insertion du personnel et fait appel au contrôleur et la méthode d'insertion ( 
          La méthode étant assez longue je ne la rajouterais pas mais elle se trouve dans ma classe 
          principal)*/
       btInsertion= new Button("Ajout du Personnel");
       btInsertion.setPrefWidth(200);
       btInsertion.setOnAction(a -> {
  actionAjoutPersonne(primaryStage);
 }); 
        
        //Construction de la Table , colonne ...
        tbPersonne = new TableView<>();
 tbNom = new TableColumn<>("Nom");
 tbPrenom= new TableColumn<>("Prenom");
 tbAge = new TableColumn<>("Age");
 borderPane.setCenter(tbPersonne);
 
 // Ajout des 2 bouton
 //Pane pour les boutons
 TilePane lstBoutons = new TilePane();
 lstBoutons.getChildren().add(btInsertion);
 lstBoutons.setPadding(new Insets(0,10,0,10));
 
 borderPane.setRight(lstBoutons);

 Scene scene = new Scene(borderPane, 1100, 700);
 scene.getStylesheets().add("/vues/css/vues.css");
 primaryStage.setTitle("Personne");
 primaryStage.setScene(scene);
 initiliseDonnees();
 primaryStage.show();

    }
}

private void initiliseDonnees() {
           // Affiche la Liste des Personnes dans la BD
     List<Person> list= personneDAO.getListe("");
     loPersonne = FXCollections.observableArrayList(list);
     tbNom.setCellValueFactory(new PropertyValueFactory<Person, String>("nom"));
     tbPrenom.setCellValueFactory(new PropertyValueFactory<Person, String>("prenom"));
     tbAge.setCellValueFactory(new PropertyValueFactory<Person,Integer>("age"));
     tbPersonne.getColumns().addAll(tbNom,tbPrenom,tbAge);
     tbPersonne.setItems(loPersonne);
}

@Override public void update(Observable arg0, Object arg1) {
 initiliseDonnees();  
 }


Merci d'avance pour vos remarques ! .
Afficher la suite