Réglage de la Barre de Défilement sur un JScrollPane
J'ai cette JTextPane
(enveloppé dans un JScrollPane
) qui est soutenue par un HTMLEditorKit
. Le contenu de la JTextPane
est simple en HTML avec des images (fichiers locaux) incorporé à l'aide des balises img. Le problème est que lorsque vous chargez le JTextPane
, il prend une fraction de seconde à charger, puis il est livré avec la barre de défilement au bas de la page. Si je fais:
JTextPane text = new JTextPane();
JScrollPane scroll = new JScrollPane(text);
//do some set up...
scroll.getVerticalScrollBar().setValue(0);
il fixe la barre de défilement momentanément, puis une autre thead (sans doute qui est en charge du chargement des images) vient et frappe la barre de défilement vers le bas. J'ai essayé d'ajouter:
((AbstractDocument)text.getDocument()).setAsynchronousLoadPriority(-1);
mais qui n'a pas le fixer. Est-il possible d'obtenir un événement de soit text.getDocument()
ou text
qui m'avertir lorsque le volet est fini de chargement, de sorte que je peux mettre la barre de défilement, alors? L'alternative est que j'ai mis en place un autre thread pour attendre une seconde ou deux, puis réglez la barre de défilement, mais c'est un mauvais hack.
Vos suggestions?
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé d'utiliser invokeLater?
Si cela ne fonctionne pas, de creuser dans l'image vue est assez difficile donc ma prochaine étape serait de traquer pourquoi la barre de défilement est en train de changer:
Vous pouvez également utiliser un débogueur dans le setValue() méthode au lieu de juste l'impression de la trace de la pile.
Suivantes résolu le problème pour moi, au bout de 50 minutes de désespoir:
Est votre application mono-thread par hasard? Si c'est vous pouvez demander une liste de threads en cours d'exécution et être averti lorsqu'ils ont terminé, puis réglez la barre de défilement de la valeur. Est ce qu'une option?
Ou vous pouvez fournir une ImageObserver à chaque image chargée et définir la position de la barre de défilement lorsque toutes les images sont signalés chargé?