【问题标题】:Jtextpane doesn't scroll down enoughJtextpane 向下滚动不够
【发布时间】:2015-08-27 23:44:25
【问题描述】:

我正在编写一个聊天应用程序,可以在其中发布图像(使用 html)。消息显示在 Jtextpane 中,包装在 Jscrollpane 中,该 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());
}

有没有办法解决这个问题?

【问题讨论】:

  • 将图像显示委托给 SwingWorker 或类似名称,然后在 Worker 完成后滚动(并且图像存在/可访问)。如果做不到这一点,请重载 addMessage 以考虑正在传递的图像并同时传递图像尺寸。

标签: java swing htmleditorkit


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多