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?
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