J'ai ce JTextPane
(enveloppé dans un JScrollPane
) qui est soutenu par un HTMLEditorKit
. Le contenu du JTextPane
est un code HTML simple avec des images (fichiers locaux) incorporées à l'aide de balises img. Le problème est que lorsque vous chargez le JTextPane
, il faut une fraction de seconde pour charger, puis il apparaît avec la barre de défilement au bas de la page. Si je fais:Définition de la barre de défilement sur un JScrollPane
JTextPane text = new JTextPane();
JScrollPane scroll = new JScrollPane(text);
// do some set up...
scroll.getVerticalScrollBar().setValue(0);
il met la barre de défilement momentanément et puis un autre thead (sans doute qui est responsable 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 cela ne l'a pas résolu. Y at-il un moyen d'obtenir un événement de text.getDocument()
ou text
qui m'avertira quand le volet est fini de charger afin que je puisse définir la barre de défilement alors? L'alternative est que j'ai mis en place un autre thread à attendre une seconde ou deux, puis définir la barre de défilement, mais c'est un mauvais hack.
Vos suggestions?
La première solution fonctionne, merci. Pourquoi sur Terre n'y at-il pas une méthode pour régler ceci sans avoir à appeler SwingUtilities? –
Aucune idée. Je pense que la façon dont il est conçu est que vous devez créer le JScrollPane, l'ajouter à l'écran, et _then_ définir la valeur. Cela n'a aucun sens pour moi. – Spyder