java JTextPane未增加其高度并剪切HTML内容

lnxxn5zx  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(102)

我正在构建一个Swing GUI应用程序,需要在文本片段(带有格式和列表的文本消息,可能还有表格和图像)中显示简单的HTML,所以我选择使用可以呈现HTML的JTextPane。
我的GUI中有以下元素结构:
jSplitPane -〉jScrollPane -〉jPanel -〉带有GroupLayout的jPanel(消息元素)-〉消息内容的jPanel Package (HTML内容jTextPane加上音频播放器自定义jPanel)-〉带有HTML消息内容的jTextPane
问题是jTextPane正在剪切其内容,尽管其父级没有限制其最大高度。
我不知道,为什么会这样。
以下是MessageView结构:

通用GUI结构:

下面是程序运行时的结果:

下面是文本消息的HTML:

<div style="padding: 0px 3px; font-size: 14px; font-family: Tahoma">
    Some <i>text</i><br>And more,<br>And more...<br>And more...<br>And more...<br>
    And more...<br>And more...<br>
    <img src="http://popov654.pp.ru/copybox/photo.jpg" width="390" height=\"260\">";
</div>

同样在设置jTextPane HTML内容后,我使用以下代码(在网上找到的):

try {
    Dimension d = msgContent.getPreferredSize();
    Rectangle r = msgContent.modelToView(msgContent.getDocument().getLength());
    d.height = r.y + r.height;
    msgContent.setPreferredSize(d);
    JFrame topFrame = (JFrame) SwingUtilities.getWindowAncestor(this);
    topFrame.getContentPane().validate();
} catch (Exception ex) {}

如果没有这段代码,jTextPane的高度只有30-40像素,但最有趣的是,当我更改设置d.height的第4行,并向其添加100或200个像素时,显示屏上没有任何变化。
UPDATE:注解掉了这段代码,此时它也没有更改任何内容。
我错过了什么?有什么想法吗?

8hhllhi2

8hhllhi21#

看来我找到了一个可行的解决方案(尽管我不确定这是不是最好的)。
我在设置HTML内容后添加了以下代码:

msgContent.setMinimumSize(new Dimension(msgContent.getWidth(), msgContent.getPreferredSize().height + 20));

setPreferredSize(new Dimension(getWidth(), msgContent.getPreferredSize().height + 160));
SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        System.out.println(msgContent.getHeight() + ", " + getHeight());
    }
});

它现在看起来不错,我有适当的消息高度和工作垂直滚动在msgsList容器。

相关问题