Bonjour,

J'ai ma TableView qui se met à jour une fois sur trois !
J'utilise une liste Observable mais je me demande si je l'utilise correctement.

Voici le code de ma TableView :
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
 
...
    private final Teams_TableViewCtrl teams_tvc;
    private final TableView<Team> table;
    private final ObservableList<Team> data;
    private final GroupTeams groupTeams;
    private final Facade facade;
 
public Teams_TableView(Facade facade, GroupTeams groupTeams) {
        this.facade = facade;
        facade.addObserver(this);
        this.groupTeams = groupTeams;
        this.teams_tvc = new Teams_TableViewCtrl(facade, this);
        data = facade.getAllTeams();
 
        // TableView ***********************************************************
        table = new TableView<>();
        table.setEditable(true);
 
        table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        buildTableView();
 
        // Construct layout ****************************************************
        this.getChildren().add(table);
}
 
public void buildTableView() {
        table.setItems(data);
 
        final TableColumn<Team, String> chipNbrCol = new TableColumn<>(Messages.getString("chipNbr"));
        chipNbrCol.setCellValueFactory(new PropertyValueFactory("id"));
        chipNbrCol.prefWidthProperty().bind(table.widthProperty().multiply(0.2));
        final TableColumn<Team, String> nameTeamCol = new TableColumn<>(Messages.getString("teamName"));
        nameTeamCol.setCellValueFactory(new PropertyValueFactory("nameTeam"));
        // Permet de modifier le nom de l'équipe
        nameTeamCol.setOnEditCommit(new EventHandler<CellEditEvent<Team, String>>() {
            @Override
            public void handle(CellEditEvent<Team, String> t) {
                String oldNameTeam = t.getRowValue().getNameTeam();
                ((Team) t.getTableView().getItems().get(
                        t.getTablePosition().getRow())).setNameTeam(t.getNewValue());
                facade.updateNameTeam(t.getRowValue(), oldNameTeam);
            }
        });
        nameTeamCol.setEditable(true);
        nameTeamCol.setCellFactory(TextFieldTableCell.forTableColumn());
        nameTeamCol.prefWidthProperty().bind(table.widthProperty().multiply(0.8));
        table.getColumns().setAll(chipNbrCol, nameTeamCol);
        table.getSortOrder().add(nameTeamCol);  //permet de trier la colonne 'teamName' par défaut
        table.getSelectionModel().selectedItemProperty().addListener(teams_tvc);
 
}
...
A la ligne 14, je passe par une facade pour remplir la liste (observable) 'data'.
Le code de la facade n'apporte rien dans ce cas-ci pour comprendre car je fais appel directement à la méthode getAllTeams de la classe EscapeRoom_Manager

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
 
public class EscapeRoom_Manager {
   private ObservableList<Team> teams = FXCollections.observableArrayList();
 
     public EscapeRoom_Manager() {
       teams = loadTeams();
    }
 
    public ObservableList<Team> loadTeams(){
        IEscapeRoom_TeamsDAO escapeRoom_TeamsDAO = AbstractDAOFactory.getFactory().createEscapeRoom_TeamsDAO();
        return (ObservableList<Team>) escapeRoom_TeamsDAO.loadTeams();
    }
 
     public void addTeam(Team t){
        IEscapeRoom_TeamsDAO escapeRoom_TeamsDAO = AbstractDAOFactory.getFactory().createEscapeRoom_TeamsDAO();
        escapeRoom_TeamsDAO.addTeam(t);
        teams.add(t);
    }
}
 
// Getters *****************************************************************
    public ObservableList<Team> getAllTeams() {
        return teams;
    }
C'est également dans cette classe EscapeRoom_Manager que j'ajoute des items dans ma TableView grace à la méthode addTeam.
Et donc ma question : puisque 'teams' (de la classe EscapeRoom_Manager) et 'data' (de la classe Teams_TableView) sont des listes observables, est-ce que ma TableView doit se mettre à jour à chaque ajout d'un item ?

Merci pour toute aide.