0

我正在编写一个聊天应用程序,可以在其中发布图像(使用 html)。消息显示在 Jtextpane 中,包装在 Jscrollpane 中,每次收到消息时都设置为向下滚动。对于普通文本,这非常有效,但是,每次收到消息时都需要重新加载图像,并且滚动窗格似乎在图像完成加载之前向下滚动,仅部分向下滚动。我尝试不断从另一个线程向下滚动它,但这似乎并没有这样做,所以我猜它没有看到图像对象的实际大小,只有在实际图像之前加载的小“占位符”图片?

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());
}

有没有办法解决?

4

1 回答 1

1

所以我猜它看不到图像对象的真实大小,只有在实际图像之前加载的小“占位符”图片?

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

尝试将该代码包装在 a 中,SwingUtilties.invokeLater()以便将代码添加到 EDT 的末尾。希望当代码执行时文档将被正确更新。

我还会考虑使用带有样式属性的常规文本:https ://stackoverflow.com/a/32235020/131872 。我发现使用属性更容易,然后担心使用 HTML 正确格式化文本字符串。

于 2015-08-27T15:37:39.863 回答