IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaFX Discussion :

Mise à jour d'une TableView


Sujet :

JavaFX

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut 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 : 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.

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Quand tu dis "J'ai ma TableView qui se met à jour une fois sur trois !" tu veux dire que les lignes dans la table ne sont pas ajoutées / supprimées quand tu ajoute / supprime des valeur ? Ou que le contenu des cellules dans chaque colonne d'une même ligne ne se met pas à jour quand les valeurs dans l'objet affiché sur cette ligne change ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 100
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Je veux dire que les lignes de la table ne sont pas ajoutées quand j'ajoute des valeurs.

    Marc

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    En l'état je ne vois rien de spécial qui empêcherait la table de se mettre à jour. Dans quel thread la méthode addTeam() est-elle invoquée ? Peux-tu ajouter un ListChangeListener sur data pour vérifier que le contenu de la liste observable change bien quand cette méthode est invoquée ?
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. TableView mise à jour d'une seule cellule
    Par paesportcomputing dans le forum JavaFX
    Réponses: 5
    Dernier message: 12/04/2017, 00h51
  2. Réponses: 3
    Dernier message: 13/03/2015, 19h09
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Mise à jour d'une bd mysql
    Par joquetino dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 11/01/2005, 14h05
  5. [FireBird 1.5]Mise à jour d'une SGBD ?
    Par Sitting Bull dans le forum Débuter
    Réponses: 3
    Dernier message: 03/09/2004, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo