OVH Cloud OVH Cloud

JScrollBar toujours en bas

1 réponse
Avatar
Fabrice.Bacchella
Bonjour,

J'ai une fenêtre avec du texte, dans une JTextArea. C'est un affichage
de texte reçu via une source externe. Comme il peut être long, cette
JTextArea est dans une JScrollPane.
Jusqu'a là, pas de problème.
Maintenant, je voudrais que l'ascenseur soit toujours en bas de la
barre de défilement, pour voir le nouveau texte, sauf quand
l'utilisateur est en train de regarder l'ancien texte, la barre doit
alors rester où l'utilisateur regarde.

Pour savoir si l'utilisateur manipule l'ascenseur , j'utilise
getValueIsAdjusting(). Quand il relache, il descend, mais c'est pas
grave. Sauf s'il existe une meilleur méthode, dans ce cas, je suis
prenneur.

Pour forcer la descente, je detecter les évenements sur le document
sous jacent à la JTextArea et je fais un :

myJScrollBar.setValue(myJScrollBar.getMaximum() -
myJScrollBar.getVisibleAmount());

lors d'un insertUpdate.

Mais ça plante ! Ça plante vraiment la JVM : il ne se passe plus rien,
l'affichage est bloqué.

Qu'est ce que j'ai raté ? C'est pas la bonne méthode ?

Merci d'avance pour vos conseils eclairés.
---
http://fba.homeip.net

1 réponse

Avatar
jocelyn
Salut !

1ere point: la jvm plante sans aucune trace ? Il en existe surement
(console?), fais nous les connaitre.
2eme point: ton calcul suivant me parait sujet a bugs
myJScrollBar.setValue(myJScrollBar.getMaximum() -
myJScrollBar.getVisibleAmount());
Je comprends ce que tu veux faire mais la doc de la methode getMaximum()
dit:
The maximum value of the scrollbar is maximum - extent. Je me demande donc
si tu ne refais pas
un calcul deja fait avant. Essaie de faire juste un
myJScrollBar.setValue(myJScrollBar.getMaximum())
3eme point: mettre ce code dans le document me parait crade. Le document n'a
pas a savoir s'il a 0,1 ou n
vues, et encore moins les manipuler. Je le mettrais plutot a l'endroit ou tu
ajoutes ton texte a ta JTextArea.

J'espere que ca te donnera des pistes !
Bye

--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même