繁体   English   中英

限制html JLabel中的行数

[英]Restrict number of lines in html JLabel

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

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

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

JLabel似乎可以很好地处理不完整的标记,因此我可能可以对输入字符串执行二进制搜索之类的操作,以查找哪个字符将导致其超过4行限制(使用FontMetric确定4行将包含多少个像素),并且然后将现有标签替换为新标签。 这种方法的最大缺点是,每次用户调整面板大小或更改字体时,我都需要运行计算(感觉就像是肮脏的hack)。

将JLabel添加到JScrollPane,以合理的首选大小设置滚动窗格。 滚动条将显示为必需。

我不知道这些问题的任何绝对解决方案,因为我怀疑您可以定义“线”是什么。 一行文字可能是12号字体,另一行是24号字体。我不知道有什么方法可以计算每一行的高度。

即使您确实使用ComponentListener来处理componentResized()事件,我也不确定您能否提出合理的算法来计算4行显示的确切宽度/高度。

我会尝试遍历文本字符串,并删除第三个“ \\ 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> ”或您需要的任何标签

嘿,我找到了一种可行的方法。 我正在使用的框架允许我为字体大小更改创建一个侦听器。 在此侦听器中,我确定标签的新最大大小是什么( getFontMetrics(font).getHeight() * 4 ),然后将标签上的最大高度重新设置为此,然后重新分发所有内容。 这甚至可以很好地处理自动换行的情况。 我猜想有人可以通过愚蠢的HTML输入来执行令人讨厌的事情,但这可以很好地涵盖99%的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM