7
votes

Table SWT avec hauteur de ligne variable: Travailler sur Linux, mais pas Mac / Windows

Problème: j'ai besoin d'une table SWT (Jface TableViewer) avec une hauteur de ligne variable. En fait, j'ai résolu ceci sur ma machine de développement (exécutant Ubuntu 10.10). Malheureusement, cela ne fonctionne pas sur Windows ni sur Mac.

Initialement, je pensais que je n'ai pas utilisé les bibliothèques correctement. Mais maintenant, je crains que ce que je veux faire est tout simplement pas possible sur Windows. J'espère que quelqu'un me convainc autrement.

reproduire: Plutôt que de fournir mon code ici, j'ai construit un programme minimal pour reproduire le problème. J'ai commencé avec le sniplet suivant:

http://git.eclipse.org/c/platform.ui. Git / Arbre / Exemples / Org.eclipse.Jface.Snippets / Eclipse% 20Jface% 20Snippets / Org / Eclipse / Jface / Snippets / Visites / Snippet049StyledCelllabelProvider.java

J'ai modifié la mise à jour () Méthode pour produire deux lignes de texte pour les répertoires et une ligne pour les fichiers (pour simuler un environnement de hauteurs de lignes variables): xxx

ceci fonctionne comme prévu sous Linux, mais sur Windows Toutes les lignes ont la même hauteur. Spécifiquement, une seule ligne est visible.

Ensuite, j'essayais d'aider SWT en faisant une mesure () plus intelligente. Donc j'ai réécrit la mesure () comme ceci: xxx

Le résultat: toutes les lignes ont la hauteur 32. Encore une fois, cela fonctionne comme prévu sur Linux.

Ma peur est que sur Windows, toutes les lignes doivent simplement avoir la même hauteur. Ce serait un showstopper pour moi. Quelqu'un peut-il confirmer cela, voire mieux, fournir une solution de contournement?

merci!


2 commentaires

En fait, j'ai peut-être trouvé une explication de ce comportement, et peut-être même une solution (je dois toujours essayer cela): bugs.eclipse.org/bugs/show_bug.cgi?id=148039


Merci à tous pour les réponses. J'ai fini par utiliser sourceforge.net/projects/agilegrid , qui dessine également la table de manière nativement, comme Ktable . C'est un plaisir de travailler avec, certainement comparé au SWT.


3 Réponses :


2
votes

Je peux confirmer que sur Win32 Les rangées de table ne peuvent avoir que la même hauteur. Voir par exemple Ce rapport de bogue . La solution de contournement du bogue 148039 fait SettiTemHeight () accessible, mais cela ne change pas cette restriction.


0 commentaires

4
votes

J'ai rencontré ce problème aussi - besoin d'un widget de table SWT susceptible de supporter les cellules de hauteurs variables. Comme le dit le.duckman, Win32 Les rangées de table ne peuvent pas faire cela. Nous avons fini par utiliser le widget Ktable. Il n'utilise pas les tables d'OS natifs.

http://sourceforge.net/projects/ktable/

Cela a fonctionné correctement pour nous, mais il a des bizarreries. Heureusement, le code source est assez facile à modifier pour répondre à vos besoins.


1 commentaires

Cela a l'air vraiment intéressant. Si je n'avais pas encore refoulé avec AgileGrid, je donnerais un essai KTable.



1
votes

Nous utilisons le widget Nébuleuse grille. http://www.eclipse.org/nebula/widgets/grid/grid. php

Il est exceptionnellement flexible. Dans notre cas, nous l'utilisons pour obtenir plus de fonctionnalités de table de style HTML associées à un widget TreeViewer.

capture d'écran text alt


2 commentaires

Êtes-vous sûr que la nébuleuse aborde ce problème? Je crois que je l'ai vérifié et je l'ai rejeté. Je ne suis pas sûr que je l'ai rejeté parce que c'était en alpha, ou parce que cela avait également eu les limitations de la hauteur de la ligne. Mais je pense C'était à cause de problèmes de hauteur de rangée également.


Pour obtenir les hauteurs de variable n'est pas complètement hors de la boîte, mais il est très simple. Chaque ligne de la grille a son propre attribut de hauteur indépendant. Alors, où comme sur la peinture / mesure dans un widget de table normal, vous pouvez ajuster la hauteur, mais tous les tableaux sont maintenant cette hauteur maximale dans la grille que vous pouvez ajuster chaque griditem.Setheight (). Dans mon cas, j'utilise le visualiseur de la table de la grille et que ma méthode de mise à jour du fournisseur d'étiquettes calculille la hauteur appropriée pour chaque ligne. C'est bêta mais a été très stable pour nous pour les 2 dernières années environ.