我正在构建一个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:注解掉了这段代码,此时它也没有更改任何内容。
我错过了什么?有什么想法吗?
1条答案
按热度按时间8hhllhi21#
看来我找到了一个可行的解决方案(尽管我不确定这是不是最好的)。
我在设置HTML内容后添加了以下代码:
它现在看起来不错,我有适当的消息高度和工作垂直滚动在
msgsList
容器。