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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
PersonControlleur.java
@FXML void Insertion (ActionEvent event) {
  try {
  Person personne = new Person(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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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 ! .