Question

Je suis beaucoup de données affichons dans JXTable du projet SwingX . Après le chargement des données, j'appelle packAll() sur la table, mais avec 200 cents colonnes et 30.000 dossiers qu'il pourrait prendre 5 secondes ou plus. J'appelle cela du fil swing qui signifie que l'interface utilisateur est bloqué pour les 5 secondes. J'essayé d'appeler packAll sur un fil d'arrière-plan et que je doutais, faisant, a côté impair affecte. Après avoir appelé packAll(), quand je passe la souris avec la souris sur la table, tous les chiffres du tableau semblent être constamment mise à jour des numéros différents. Est-il possible que je peux obtenir une expérience utilisateur raisonnable dans JXTable lors de l'emballage les colonnes d'une telle grande table.

Était-ce utile?

La solution

Cette boucle ColumnFactory vous tue:

for (int r = 0; r < getRowCount(table); r++) {
        Component comp = renderer.getTableCellRendererComponent(table, table
                .getValueAt(r, column), false, false, r, column);
        width = Math.max(width, comp.getPreferredSize().width);
}

Vous devriez probablement définir la largeur des colonnes vous-même, ou peut-être charger une ligne, Emballez la table, puis charger le reste des données.

Autres conseils

Jay, ne sais pas quelle partie de la réponse que vous avez marqué comme correct que vous entendez par « excellente idée » - il est au moins un peu clair. Les deux suggestions sont les suivantes:

a) faire vous-même: laisse ouverte la question de savoir quand et où et comment exactement b) le chargement en deux étapes, ce qui en fin de compte se résume à la mesure de la première rangée chargée uniquement. Ce qui est prévu dans ColumnFactory déjà, s'il vous plaît lire la doc api pour getRowCount (JXTable).

Même si votre contexte n'est pas aussi uniforme à résoudre par une simple substitution de getRowCount (), un ColumnFactory personnalisé est le chemin à parcourir: vous pouvez mettre en œuvre une stratégie de mesure quelle que soit vous choisissez: -)

@ z7sg: rien de « tuer » quoi que ce soit - comme vous avez sans doute remarqué si vous aviez lu l'api doc ;-) mesure Cell est pas tout à fait trivial, une implémentation par défaut ne peut pas adapter tout, c'est pourquoi ColumnFactory est conçu pour l'extension : sous-classe et adapter à vos besoins.

Vive Jeanette

200 colonnes et 30.000 lignes va prendre un moment pour rendre. Je ne pense pas que vous allez être en mesure d'éliminer le temps d'attente à moins que vous faites quelque chose drastique. Votre meilleur pari peut-être de ne pas montrer la table jusqu'à ce que les données sont chargées.

Vous dites que vous avez 200 colonnes? Eh bien, je doute tous les 200 sont visibles à un moment donné. Alors que faire si vous emballez juste la première colonne 10-20? Cela devrait réduire le délai de 1/10 ou 1/20.

Si JXTable n'emballez à colonnes individuelles, vous pouvez essayer de vous permettre de ne pas utiliser le Table colonne régleur que je pense fournit les mêmes fonctionnalités sur une JTable régulière. Il vous permet de compresser des colonnes individuelles.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top