2009-10-28 7 views
2

Il existe un certain nombre de widgets SWT de table/feuille de calcul "avancés" (Nattable, Nebula Grid), mais aucun d'entre eux ne prend en charge de très grands ensembles de données. Nattable est celui qui se rapproche le plus, mais il a toujours des limitations dans les types de données qu'il utilise, ce qui fait que le nombre de lignes dans la table devient très limité.Widgets de tableau SWT avancés

Je dois être en mesure de représenter au moins 2^32 lignes, de préférence 2^64.

+1

Quel utilisateur dans son bon sens veut voir 2^32? Je vous suggère de revoir vos exigences. – andyczerwonka

+2

Personne ne parle de ** voir ** 2^32 lignes. Tout est une question de ** adresser **. Le modèle que j'ai est un espace mémoire de 32 bits. Si je ne peux pas définir le nombre de lignes à 2^32, je devrai implémenter mon propre système de pagination, que j'espérais éviter. – JesperE

Répondre

3

Quel est le problème avec SWT.VIRTUAL avec une table reguar? Vous pouvez ensuite utiliser un LazyContentProvider, qui vous donne un rappel pour le chargement de ce qui est nécessaire dans la vue.

Quelque chose comme ça ...

TableViewertableViewer = new TableViewer(parent, SWT.VIRTUAL|SWT.BORDER|SWT.V_SCROLL); 
// skipping the noise 
tableViewer.setItemCount(100000); 
tableViewer.setContentProvider(new LazyContentProvider()); 
tableViewer.setLabelProvider(new TableLabelProvider()); 
tableViewer.setUseHashlookup(true); 
tableViewer.setInput(null); 
+1

Essayez setItemCount (Integer.MAX_VALUE). Le widget Table SWT dispose d'un tableau de sauvegarde pour tous les éléments. Le seul "virtuel" à ce sujet est que la ** valeur ** réelle n'est pas récupérée jusqu'à ce qu'elle soit nécessaire. Cela fonctionne bien si la récupération est coûteuse, mais ne dépasse pas quelques millions de lignes. – JesperE

+0

Si vous avez besoin exactement de 2^32 lignes, utilisez une table avec le style SWT.VIRTUAL avec les éléments Integer.MAX_VALUE, et quand vous devez montrer par exemple l'article 500 (sur 2^31), vous imprimerez l'article no. 1000 (sur 2^32). –

+1

Malheureusement, setItemCount (Integer.MAX_VALUE) provoque une erreur OutOfMemory, probablement parce que le contrôle Table tente de créer un tableau de cette taille. – JesperE

6

SWT Matrix pauses Les bariers de capacité permettant une quantité BigInteger de lignes ou colonnes. C'est une source fermée, mais gratuite pour un usage privé et non commercial. Version alpha précoce si à ce stade.

+0

SWT Matrix semble effectivement prometteur. Merci, je vais essayer. – JesperE

+0

J'apprécierais connaître vos impressions après l'avoir essayé. Toutes les fonctionnalités importantes manquant ou zones non couvertes dans la documentation? –

+0

Fera. Je vais juste devoir trouver du temps pour le faire. :) – JesperE

Questions connexes