Comprendre l'API Cell de JavaFX pour customiser les contrôles de base, un tutoriel de Fabrice Bouyé
Bonjour, je vous propose un second article concernant JavaFX, cette fois-ci sur l'utilisation de l'API Cell qui couvre les contrôles virtualisés (ListView, TreeView, etc.).
http://fabrice-bouye.developpez.com/...ls/javafxcell/
Vous pouvez profiter de ce message pour partager vos commentaires. Cet article a été commencé sous JavaFX 2.2 il y a plus d'un an et j'ai ensuite mis à jour certaines parties pour JavaFX 8 donc, surtout, n’hésitez pas à m'indiquer toutes erreurs, omissions ou encore des éventuels anomalies.
Row factory , connaitre la hauteur des lignes.
Bonjour,
c'est juste une info supplémentaire concernant mon post sur les hauteurs de cellules(lignes) des table views .
Dans l'idée je sur en train de faire un editeur friendly user de documents destinés a l'impression. Hors ces documents comportent une liste qui a une hauteur générale variable non connue a l'avance, et évidement toutes les lignes n'ont pas la même hauteur.
Destiné a l'impression je connais ma hauteur max.
L'idée étant de savoir où je dois couper ma liste pour le report de page (sachant que je peux pas diviser le nombre d’éléments par le nombre de pages):
Le calcul de la hauteur d'un noeud (Node.getHeight()) se fait par rapport au noeud parent, il faut donc affecter la tableview a son parent , et afficher le stage.
ensuite on place un écouteur sur la hauteur de la tableview qui va ajouter une ligne une fois que la hauteur change tant que l'on a pas atteint la hauteur max.
si on dépasse la hauteur max on supprime la dernière ligne, on fait le report de page et on recommence.
Vu que tout est affiché pendant la création, on voit les lignes s'ajouter au fur et a mesure sur le noeud parent, ainsi que toute la création dynamique.
La tableView n'est pas adaptée pour mon utilisation , j'ai donc préféré une gridPane :
Pour faire le calcul de mes report de page, je lance un stage avec un pane de hauteur non fixe:
Je créé ma gridpane avec un GridPane.addRow(index,Collection... Node).
Comme pour la tableview je place un écouteur sur la hauteur de ma gridpane et je lui met un setVisible(false)
dès que j'atteins ma hauteur max , Je place ma liste dans une HashMap<Integer,<List<Item>> (numéro de page et liste tronquée a l'index adéquat pour rentrer dans la page)
arrivé a la fin, j'ai, dans ma HashMap, la représentation de l'affichage.
J'applique la même procédure pour chaque éléments qui doivent se comporter pareil le tout, bien caché de l'utilisateur.
Lancé dans un thread, pendant la création du document j'ai mis une petite progressBar avec une invitation d'attente.
Une fois a 100% je supprime les nœuds qui m'ont servis a créer mon document, et j'ai plus qu'a l'afficher.
c'est vrai que c'est du bidouillage. Mais en attendant que je découvre comment le faire correctement c'est la seule solution que j'ai trouver pour regler mon problème.
-- Fin de l'info.