限制html JLabel中的行数

时间:2010-04-26 02:30:22

标签: java html swing jlabel

我有JLabel需要显示一些html格式的文本。但是,我想将其限制为4行(如果是这样,请提供一个按钮来查看所有内容)。

到目前为止,我已尝试手动或通过布局管理器设置最大尺寸。但是,这两种解决方案都可能导致显示部分行。

编辑:要添加更多细节,即使正确地考虑换行,调整组件大小和更改字体大小,我也需要强制使用4行。我已经考虑通过用适合的新标签替换标签来处理resize / fontsize更改。

JLabel似乎很好地处理了不完整的标签,所以我可能会对输入字符串进行二分查找,发现哪个字符会超过4行限制(使用FontMetric来确定4行的像素数,然后用新的标签替换现有的标签。这种方法的一个重大缺点是,每次用户调整面板大小或更改字体时,我都需要运行计算(这感觉就像是脏兮兮的黑客)。

3 个答案:

答案 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%的情况。