2015-08-27 2 views
0

J'écris une application de chat dans laquelle il est possible d'afficher des images (en html). Les messages sont présentés dans un JTextPane, enveloppé dans un JScrollPane, qui est réglée pour faire défiler vers le bas à chaque fois un message est reçu. Pour le texte normal, cela fonctionne plutôt bien, cependant, les images doivent être rechargées à chaque fois qu'un message est reçu, et le scrollpane semble défiler vers le bas - avant - les images ont fini de charger, ne laissant que partiellement défiler vers le bas. J'ai essayé de faire défiler en permanence vers le bas d'un autre fil, mais cela ne semble pas le faire, alors je devine qu'il ne voit pas la taille réelle de l'objet image, seul le petit pic « espace réservé » qui est chargé avant que l'image réelle?JTextPane ne défile pas vers le bas assez

public void addMessage(String sender, String msg) throws BadLocationException, IOException{ 

    pane.setEditorKit(kit); 
    pane.setDocument(doc); 

    kit.insertHTML(doc, doc.getLength(), "<b>[" + sender + "]</b> " + msg, 0, 0, null); 
    pane.setCaretPosition(pane.getDocument().getLength()); 
} 

Y a-t-il un moyen de contourner ce problème?

+0

délégué l'affichage d'image à un 'SwingWorker' ou similaire, puis faites défiler une fois que le travailleur se termine (et l'image est présente/accessible). A défaut, surchargez 'addMessage' pour rendre compte des images transmises et transmettre les dimensions de l'image en même temps. – Gorbles

Répondre

1

donc je devine qu'il ne voit pas la taille réelle de l'objet d'image, seul le petit pic « espace réservé » qui est chargé avant que l'image réelle?

pane.setCaretPosition(pane.getDocument().getLength()); 

Essayez d'envelopper ce code dans un SwingUtilties.invokeLater() si le code sont ajoutés à la fin de l'EDT. Espérons que le document sera ensuite correctement mis à jour lorsque le code sera exécuté.

Je voudrais également envisager d'utiliser du texte normal avec des attributs de style: https://stackoverflow.com/a/32235020/131872. Je trouve plus facile de travailler avec des attributs puis de s'inquiéter de la bonne mise en forme de la chaîne de texte avec HTML.