10
votes

JavaFX Tabley Tabley Redimensionner pour adapter le contenu de la cellule

Je cherche un moyen de redimensionner une tableche dans une vue de table afin que tout le contenu soit visible dans chaque cellule (c'est-à-dire pas de troncature).

J'ai remarqué qu'un double clic sur la colonne Divider est adapté à la colonne sur le contenu de ses cellules. Y a-t-il un moyen de déclencher cette programmation?


6 commentaires

Avez-vous créé une vue dans Scene Builder


Oui, la vue a été créée dans Scene Builder.


alors je pense que vous ne pouvez pas le faire développer sur le parent élargi


Je ne pense pas que cela compte vraiment où il a été créé. Je veux juste forcer programmatiquement un redimensionner lorsque la table est remplie de contenu. Fondamentalement, je veux éviter une situation où les données d'une cellule sont tronquées.


Bonjour, avez-vous trouvé une solution pour votre problème? J'ai besoin de faire exactement la même chose: p


Toutes les réponses n'ont pas fonctionné pour moi, j'ai donc mis en œuvre ma propre solution: Stackoverflow.com/a/61935985/2639515 (Les réponses liées à la méthode ResizecolumnToftOfitContent ne fonctionnent pas dans la version plus récente de JavaFX)


4 Réponses :


0
votes

Vous pouvez utiliser tableview.setcolumnResizePolicy (TableView.unConstrained_Resize_policy);

Vous pouvez également essayer de changer entre les deux polices tableview.constrained_resize_policy et tableview.unonstrained_reesize_policy au cas où tablevoir.unconstrained_resize_policy seul ne correspond pas à votre besoin.

Voici un lien utile.


6 commentaires

Malheureusement, cela ne fera que définir la stratégie de redimensionnement de la colonne déclenchée par l'utilisateur. Je suis à la recherche de la colonne de manière programmatique à son contenu (c'est-à-dire de régler automatiquement la taille des colonnes après avoir ajouté / mise à jour / suppression de données).


Ce que vous pouvez faire est de basculer entre ces deux politiques via un auditeur puis repeindre (réinparer).


Cela redimensionne les colonnes, mais il essaie de les adapter à tous dans l'espace visible (c'est-à-dire tenter de le faire faire la table n'a pas besoin d'une barre de défilement horizontale). Donc, il finit en fait de tronquer tout.


Vous pouvez définir la stratégie sur non contrainte avant que la troncature ne se produise.


J'ai la politique initialement définie sur non contrainte. Après avoir mis à jour les données, j'ai défini la stratégie sur contrainte, puis le modifier immédiatement sur non contrainte et enfin faire un demande () sur la tableView comme vous le suggérez. Le résultat est que chaque colonne est tronquée.


En fait, ce que je parle, c'est quelque chose comme initialement définir la politique à contrainte (car il n'y a pas de données), alors lorsque les données deviennent longues, c'est le moment où nous fixons la politique sur non contrainte. Mais de toute façon, le comportement supposé sur demandeLayout est de ne pas tronquer la table. Il doit y avoir quelque chose de manquant. Vous pouvez essayer de bricoler avec les codes un peu plus. Si la situation n'a toujours pas changé, vous pouvez m'envoyer un message ici à nouveau. Cordialement: D



8
votes

creuser via la source Javafx, j'ai constaté que la méthode réelle appelée lorsque vous cliquez sur le diviseur de colonnes TableView Colonnes est

protected abstract void resizeColumnToFitContent(TC tc, int maxRows)


2 commentaires

Vient d'entrer Javafx-jira.kenai.com/browse/rt-39533 à être capable de le faire d'une manière moins hacky.


Toute mise à jour sur la JIRA? Le lien ne redirige que vers un nouveau site de bugs.



5
votes

comme suggestion @tomasz, je résout par réflexion: xxx


5 commentaires

Grande solution! Fonctionne parfaitement.


Sur JDK 9, je reçois une nosuchmethodexception :(


Ne fonctionne pas pour moi, il suffit de le rendre afin que je ne puisse pas redimensionner des colonnes manuellement


@Axelkennedal quelle version Java utilisez-vous?


La méthode de la TableViewSkin "ColumintOfitMethod" jette une nullpointerException si tableview.getskin () renvoie NULL dans mon programme hébergé Java 8, ce qui me rend inutile. De plus, je ne voudrais pas ne pas compter sur les classes de soleil hérités privées restantes ...



2
votes

Les versions actuelles de JavaFX (par exemple, 15-EA + 1) Redimensionnez les colonnes de table, si le préfultiateur n'a jamais été défini (ou est défini sur 80.0F, reportez-vous à la table TableColumnheader Entrez la description de la liaison ici ).


0 commentaires