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 :

remplir une TableView depuis le base de données


Sujet :

JavaFX

  1. #1
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut remplir une TableView depuis le base de données
    j'ai un tableau à remplir par une requête SQL de jointure, où j'utilise 3 tables liées:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <TableView fx:id="table" prefHeight="266.0" prefWidth="1056.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
                        <columns>
                          <TableColumn fx:id="colMat" prefWidth="123.0" text="Matricule" />
                          <TableColumn fx:id="colNom" prefWidth="147.00001525878906" text="Nom" />
                            <TableColumn fx:id="colPrenom" prefWidth="64.33331298828125" text="Prénom" />
                            <TableColumn fx:id="colSpe" prefWidth="128.99996948242188" text="Spécialité" />
                            <TableColumn fx:id="colNiv" prefWidth="111.33331298828125" text="Niveau" />
                            <TableColumn fx:id="colForm" prefWidth="140.0" text="Formation" />
                            <TableColumn fx:id="colDateIns" prefWidth="118.3333740234375" text="Date d'inscription" />
                            <TableColumn fx:id="colValide" maxWidth="163.33331298828125" prefWidth="163.33331298828125" text="Valide" />
                        </columns>
                      </TableView>
    j'ai déclaré les colonnes dans le constructeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    @FXML private TableView<String> table;
    @FXML private TableColumn<Etudiant, String> colMat;
    @FXML private TableColumn<Etudiant, String> colNom;
    @FXML private TableColumn<Etudiant, String> colPrenom;
    @FXML private TableColumn<Etudiant, String> colSpe;
    @FXML private TableColumn<Etudiant, String> colNiv;
    @FXML private TableColumn<Formation, String> colForm;
    @FXML private TableColumn<Inscription, String> colDateIns;
    @FXML private TableColumn<Inscription, String> colValide;
    comme vous pouvez le constatez, chaque colonne appartient à une table différente, donc une classe modèle différente, donc en voulant remplir le tableau j'ai eu une erreur de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     public void initTable(String id) throws SQLException {        
            ObservableList<String> donnees = FXCollections.observableArrayList();
            donnees.clear();
            donnees = importTable();//méthode qui retourne la liste de données par SQL
     
            //erreur de retour bad return type in lambda expression
            colMat.setCellValueFactory(cellData -> cellData.getValue().getMatricule());
     
            table.setItems(donnees);//attribuer la liste au tableau
        }
    dans la classe Etudiant, l'attribut est retourné et déclaré comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private StringProperty matricule;
     
    public String getMatricule() {
            return matricule.get();
    }
    svp, comment résoudre cette erreur ?

    merci

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Euh y a quoi dans la table au final ? Vu que, euh, ici on a 4 types potentiels différents pour le contenu de la table...
    • des String ? Voir @FXML private TableView<String> table;
    • des Etudiant ? Voir @FXML private TableColumn<Etudiant, String> colMat;
    • des Formation ? Voir @FXML private TableColumn<Formation, String> colForm;
    • des Inscription ? Voir @FXML private TableColumn<Inscription, String> colDateIns;


    En supposant que toutes ces colonnes sont dans la meme table. Dans TableColumn<T, V> le T c'est sensé être le même que dans TableView<T>. Et le V c'est ce le type de ce qui sera contenu dans les cellules de cette colonne.

    Du coup je vais m'auto-citer en recopiant ce que je viens d’écrire dans l'autre sujet similaire :

    Citation Envoyé par bouye Voir le message
    Une TableView c'est juste une grosse liste. Fondamentalement c'est exactement la même chose qu'une ListView ou une ComboBox. La seule grosse différence, c'est qu'elle affiche son contenu sur plusieurs colonnes et que chaque colonne offre une vue différente du même objet. Donc on met les ElementInit <insert your model type here> dans la table et ensuite chaque colonne se débrouille pour extraire la bonne valeur dans l'objet qu'elle cherche a afficher avec sa fabrique a adaptateur.
    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
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    La seconde partie de la réponse (mais il vaudrait quand même mieux résoudre le soucis de cohérence soulevé ci-dessus avant de s'y aventurer). Pour une colonne de type TableColumn<T, V> l'extracteur qui sert de fabrique d'adaptateur pour la colonne doit renvoyer un objet de type ObservableValue<V>. Donc dans ton cas précis tu retournes une String alors que la lambda attend une ObservableValue<String> (voir une ObjectProperty<String> ou une StringProperty car les deux héritent de ObservableValue<String>) d’où l'erreur.

    Le fait de retourner une propriété c'est ce qui fait que la table se met automatiquement a jour si la valeur de l'objet change en backend ou que la valeur de l'objet est modifiée en retour lorsque la cellule est éditée par l'utilisateur.
    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

  4. #4
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    emm, je croix que j'ai compris, je vais refaire les getters pour qu'ils retournent un StringProperty

  5. #5
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    alors je croyais avoir compris mais en implémentant je me suis trouvé face à ça:
    d'abord j'ai récupéré les attributs voulus via une requête SQL dans une liste de type String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ObservableList<String> list = FXCollections.observableArrayList();
    j'ai déclaré les types dans le tableView comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @FXML private TableView<String> tableIns;
    @FXML private TableColumn<String, String> colMatIns;
    maintenant pour récupérer ça je me suis bloquée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //récupérer matricule
    colMatIns.setCellValueFactory(cellData -> cellData.getValue() ...);
    je ne sais comment faire cela car dans cette requête y'a une jointure de 3 tables donc les attributs sont dans 3 classes différentes

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Beuh...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private static class Model {
        A a;
        B b;
        C c;
    }
     
    @FXML private TableView<Model > tableIns;
    @FXML private TableColumn<Model, String> colMatIns;
     
    colMatIns.setCellValueFactory(cellData -> cellData.getValue().a. ...);
    Bref a la réception des valeurs de la BD, tu créer des nouvelles instances de Model avec des objets a, b, c et tu met cette liste de Model dans la table.
    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

  7. #7
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    donc pas de solution sans passer par une autre classe modèle, je connais cette méthode mais je n'ai pas voulu créer autre classe, donc je vais procéder à cela
    merci bouye

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Ben si il y a toujours une autre solution (la seule limite c'est ton imagination), mais tu tu veux gérer 4 listes/maps (une liste de string qui sont des clés et qui vont dans la table, une liste/map de A, une liste/map de B, une liste/map de C) ça marche tout aussi bien mais c'est plus prise de tête a gérer. Mais quel est l’intérêt ? Autant se simplifier la vie.
    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

  9. #9
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    vous avez raison, je l'ai implémenter sans erreurs de syntaxe mais j'ai une NullPointerException je ne sais d'où, j'arrive pas à la trouver

  10. #10
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Mais bon, sans info ni code...
    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

  11. #11
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    voilà, j'ai créé la classe Model avec les attributs voulus et dedans la méthode qui retourne les données de la base dans une ObservableList
    dans la classe où je gère le TableView j'ai implémenté ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    @FXML private TableView<Model> tableIns;
    @FXML private TableColumn<Model, String> colMatIns;
    Model m = new Model();
     
     
    public void fillInsTable() throws SQLException {
            ObservableList<Model> list = FXCollections.observableArrayList();
            list = m.fillAll();//je récupère ma l'objet m depuis la classe Model les données retournées
     
            colMatIns.setCellValueFactory(cellData -> cellData.getValue().getMatProperty());//une colonne
            //........ les autres colonnes
            tableIns.setItems(list);//affectation de la liste au tableau
        }
    voici l'erreur:
    Errorjava.lang.NullPointerException

  12. #12
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Août 2005
    Messages : 6 897
    Billets dans le blog
    54
    Par défaut
    Sur quelle ligne !!!!

    Je vais finir par m'acheter un jeu de tarot, une boule de cristal ou un truc comme ça pour me lancer dans les sciences divinatoires vu comment que c'est dur a chaque fois de vous arracher toutes les infos nécessaires a la résolution de vos problèmes a vous tous qui avez des soucis...
    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

  13. #13
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    je m'excuse mais l'exception ne contient aucune autre information sinon j'aurai su où trouver l'erreur, je suis entrain de chercher

  14. #14
    Membre éclairé Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Par défaut
    c'est bon j'ai réglé le problème, merci beaucoup pour votre aide et votre patience

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplir un tableau à deux dimensions depuis une base de donnée
    Par abbescr7 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 13/05/2016, 14h25
  2. Réponses: 3
    Dernier message: 09/09/2014, 15h47
  3. Remplir une DropDownList depuis une base de données
    Par paintbox dans le forum ASP.NET
    Réponses: 3
    Dernier message: 06/01/2012, 09h59
  4. [QtSql] Remplir un QTableWidget depuis une base de données
    Par Jiyuu dans le forum PyQt
    Réponses: 2
    Dernier message: 29/06/2011, 15h54
  5. [C#] Remplir une textbox depuis une base de donnée
    Par Nicos6414 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 11/04/2011, 12h03

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