Bonjour,
J'ai un petit soucis avec Java - Swing, qui m'a fait réfléchir pendant un moment sans trouver de solution :
Voilà j'essaye de développer un petit client de chat, qui fonctionne avec le protocole Oscar (un espèce de d'AIM express, ou de Pidgin en Java si vous voulez) mais mon problème ne concerne pas le moteur mais plutôt l'interface graphique.
Pour ma fenêtre de chat, j'utilise, classiquement, un JEditorPane calé dans un JScollPane (jusqu'ici pas de problème, le html s'affiche très bien), mais le principal soucis est lors de la réception d'un message :
-> Le message est recu, remis en forme en html
-> Le message formatté est ensuite ajouté au texte du JEditorPane
-> On ferme le document html du JEditorPane en rajoutant les balises </body></html>
-> On met le JEditorPane à jour
-> Pour n'afficher que le dernier message (garder la scrollbar tout en bas), on sélectionne le dernier caractère du texte gràce à la petite ligne suivante :
conversation.select(conversation.getText().length()-1, conversation.getText().length());
où "conversation" est mon JEditorPane.
En soi, ça marche mais à chaque fois que je recois un message, ça "scintille" : lorsque le JEditorPane est mis à jour, c'est le haut du texte que l'on voit, donc la JScrollBar est "réinitialisée" en quelque sorte, donc on se retrouve à voir le début de la conversation pendant quelques centièmes avant de voir ce qu'on devrait normalement voir : la fin !
C'est assez désagréable comme effet, et j'aimerais savoir si quelqun avait une idée pour éviter ça :
-> en gros, garder la scrollbar scrotchée en bas pendant que ça réinitialise.
-> Une autre solution acceptable serait que lorsque la conversation est actualisée on voie le point ou c'en était "avant" (l'avant derniere ligne) au lieu du début, avant de scroller d'un cran vers le bas....
please... help -_-
J'ai déjà essayé de mettre mon JEditorPane en doubleBuffer, le JScrollPane aussi, rien n'y fait
Configuration: Linux
Firefox 3.0