Mise à jour d'une TableView
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:
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:
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.