我有JLabel
需要显示一些html格式的文本。但是,我想将其限制为4行(如果是这样,请提供一个按钮来查看所有内容)。
到目前为止,我已尝试手动或通过布局管理器设置最大尺寸。但是,这两种解决方案都可能导致显示部分行。
编辑:要添加更多细节,即使正确地考虑换行,调整组件大小和更改字体大小,我也需要强制使用4行。我已经考虑通过用适合的新标签替换标签来处理resize / fontsize更改。
JLabel
似乎很好地处理了不完整的标签,所以我可能会对输入字符串进行二分查找,发现哪个字符会超过4行限制(使用FontMetric
来确定4行的像素数,然后用新的标签替换现有的标签。这种方法的一个重大缺点是,每次用户调整面板大小或更改字体时,我都需要运行计算(这感觉就像是脏兮兮的黑客)。
答案 0 :(得分:2)
将JLabel添加到JScrollPane,因为设置了具有合理首选大小的滚动窗格。滚动条似乎是必要的。
我不知道这些问题有任何绝对的解决方案,因为我怀疑你可以定义什么是“线”。一行文本可能是字体12和另一行24.我不知道有任何方法可以计算每条给定行的高度。
即使您确实使用ComponentListener来处理componentResized()事件,我也不确定您是否可以提出合理的算法来计算4行显示的精确宽度/高度。
答案 1 :(得分:1)
我会尝试遍历文本字符串并删除第三个“\ n”
之后的所有文本 String shortenText(String oldtext){
String newText = "";
for(int i=0;i<3;i++){
newText += oldtext.substring(0,oldtext.indexOf("\n"));//adds one line to String
oldtext = oldtext.substring(indexOf("\n")+1);//shorten old string to prepare for next iteration
}
return newText;
}
您可能还想尝试使用相同的算法,但<p>
和<br>
标签也是如此...
如果您知道可能标签的值,只需将文字从“\ n”切换为“<br>
”或您需要的任何标签
答案 2 :(得分:0)
getFontMetrics(font).getHeight() * 4
),然后将标签上的最大高度重新设置为此值,然后重新布局所有内容。这甚至可以很好地处理自动换行。我猜测有人可以用愚蠢的HTML输入来做坏事但这很好地涵盖了99%的情况。