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 :

[JavaFx FXML] Modèle générique pour une tableView


Sujet :

JavaFX

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut [JavaFx FXML] Modèle générique pour une tableView
    Bonjour,

    Dans une TableView je dois pouvoir afficher n'importe quel type d'objets (Label, Checkbox, Combobox, Images, Icon etc...)
    Comme dans mon interface j'ai des milliers de fenêtres et donc des milliers de table, je n'ai pas envie de créer un modèle de données par table. J'aurai donc besoin d'avoir un modèle de donnée générique sachant que :
    Dans une même TableColumn j'ai toujours le même type de données.
    Je n'ai pas droit au controlleur java, seulement du FXML que je dois charger.

    Par contre je peux créer de nouveaux types de composants javax (hériter de tableView, tablecolumn etc...).
    Je n'ai pas trouvé de solution aujourd'hui, any help ?

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    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 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Des milliers de fenêtres et de table ? Euh...

    En plus... tu veux dire que ta table contient des items qui sont des nœuds et que tu vas afficher ces derniers dans les cellules ?

    Ben déjà ces objet là sont tous des Node donc c'est plutôt simple de créer un truc générique. Il t'es possible de spécifier le cellValueFactory et le cellFactory dans le FXML dans certaines mesures (classe publiquement accessible sur le CLASSPATH et avec constructeur pas trop complique).

    Pour l'affichage, attention c'est un peu prise de tête, je rappelle qu'un nœud peut avoir uniquement un seul parent et qu'il faut le retirer de son parent précédent avant de l’insérer dans son nouveau parent . Or, dans le temps, les cellules peuvent être réutilises pour plusieurs items ; et un même item peut être affiche par plusieurs cellules successivement.

    Et il y a aussi le soucis que si ton nœud est déjà affiche ailleurs dans l'UI, non tu ne pourras pas l'afficher directement dans la table, il faudra soit afficher soit un snapshot (copie bitmap) soit un pair (un nœud de même type créé spécialement et disposant des mêmes propriétés synchronisées sur celles du nœud d'origine).
    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
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour et merci de ta réponse.
    Eh oui il s'agit d'une assez grosse appli effectivement avec des milliers d'occurence de TableView .

    Si je comprends bien, le cellValueFactory se charge donc de la valeur de la data et la cellFactory du rendu? Donc la valeur peut par exemple être une chaine de caractère du genre "true" ou "false", mais le rendu peut très bien être une checkBox.

    Quand tu dis constructeurs pas trop complexes, tu entends quoi ? vide ? Du coup ça donnerait quoi en fxml ? C'est difficile de trouver des tutos qui parlent des tableView et qui soient complets, les exemples sont souvent très simplistes et le fxml assez peu abordé.

    Merci encore.

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    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 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Voir : Tutoriel sur l'API Cell de JavaFX - TableView

    Oui c'est tout à fait ça. Tu as un objet et en en affiche un autre en fonction du contexte (c-a-d de la colonne).


    Pour faire simple et un peu plus abstrait :

    • une table de <T> c'est juste une liste de <T>.
    • chaque colonne affiche une vue différente de chaque objet . La colonne <T, V> affiche un <V> dans la cellule où se trouve <T>
    • la fabrique à valeur de cellule permet de transformer un <T> en un Observable<V>. Pourquoi observable ? Pour faire remonter les changement de valeur dans le <T> quand <V> change lorsque la table est éditable. Facile à faire avec un objet JavaFX (on retourne ses propriétés) ou un bean (on utilise un adaptateur vers sa propriété). Avec un POJO sans propriété observable il faudra faire remonter l'édition a mano.
    • la fabrique à cellule permet d'afficher un V dans la table. Et sert également d'éditeur lorsque la table est éditable.


    Les deux fabriques peuvent être spécifiées dans le FXML mais ça sera avec des constructeurs vides ou des paramètres constants puisqu’on ne peut pas avoir de valeur dynamiques dans le FXML (c'est là où le contrôleur est utile)
    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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Merci bien, ça me semble très clair.
    Dois je passer en résolu ou j'attends d'avoir fait mes essais ?

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    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 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Comme tu le sens
    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
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2017
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Avec une cellFactory adaptée et dans mes data une String "true" ou "false" j'arrive à faire afficher une checkbox dans une cellule en utilisant donc que du fxml.
    Je pense que les images ne me poseront pas tellement de problème.
    Par contre je galère toujours sur les combobox.

  8. #8
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Il n'y a pas quelque chose n'équivalent au JDBCAdapter que l'on utilise avec JDBC.

    Avec une JTable ou une JXTable on fait une jXTable.setModel(JDBCAdapter) et le tour est jouer...

  9. #9
    Membre habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    J'ai trouvé DataFX.

    Qlq a testé ?

    Pas de maj depuis 2014...

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 838
    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 838
    Points : 22 846
    Points
    22 846
    Billets dans le blog
    51
    Par défaut
    Pour JDBCAdapter, ce n'est pas possible directement puisqu'il n'y a pas en JavaFX d’équivalent du TableModel de Swing. Le mieux a faire serait de faire une méthode fabrique (ou mieux le pattern builder) qui retournait directement une TableView configurée avec les bonnes colonnes. Le code de JDBCAdapter est quand même hyper simple donc ça ne devrait pas être trop compliqué a coder. Apres c'est surtout coder les cellules supplémentaires pour certains types qui va demander du boulot je pense mais de ce cote-la ControlsFX peut faire une partie du boulot.

    Euh concernant DataFX le dernier commit remonte a il y a 3 mois...
    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 habitué
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2008
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 251
    Points : 192
    Points
    192
    Par défaut
    Les derniers commit de DataFX ne concernent apparemment pas le datareader qui est ce qui est intéressant dans ce cas, voir exemple ici.

    ControlsFX semble intérressant. Merci de l'info.

Discussions similaires

  1. un modèle à suivre pour une analyse structurée
    Par yaciin dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 14/05/2014, 11h06
  2. Argument générique pour une méthode
    Par tnarol dans le forum Général Java
    Réponses: 1
    Dernier message: 19/07/2012, 13h13
  3. Quel modèle décisionnel pour une relation n-n ?
    Par tinwul dans le forum Conception/Modélisation
    Réponses: 5
    Dernier message: 04/10/2010, 16h54
  4. Modèle correcte pour une architecture client-adresse-ville
    Par As2piK dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 03/10/2010, 01h32
  5. Encre générique pour une HP D2360
    Par troumad dans le forum Périphériques
    Réponses: 7
    Dernier message: 10/01/2007, 14h58

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