【问题标题】:Restrict number of lines in html JLabel限制 html JLabel 中的行数
【发布时间】:2011-02-12 05:45:59
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java html swing jlabel


    【解决方案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;
    }
    

    您可能还想尝试相同的算法,除了 &lt;p&gt;&lt;br&gt; 标签的条带...

    如果您知道可能标记的值,只需将文本从“\n”切换到“&lt;br&gt;”或您需要的任何标记

    【讨论】:

    • HTML 不使用 "\n" 换行,它使用
      标签。
    • 我只是在发布并修复它后才意识到,不过谢谢
    • 如果唯一需要关注的情况是中断、段落、列表项等,这没关系。但是,JLabel 也可以很好地处理换行。因此,如果输入的给定行包含太多字符,标签会将它们换行到下一行。 (换行对我的使用很重要,因为用户可以将创建标签的面板调整为任意大小,并且仍应限制为 4 行。)
    • 由于 css 不适用于 Swing 组件,我能想到的唯一其他选择是使用 pre 标记...我仍然不确定它的效果如何。
    【解决方案2】:

    将 JLabel 添加到 JScrollPane 中,为滚动窗格设置合理的首选大小。滚动条将出现。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 澄清一下,如果我的任何用户输入的不是简单的粗体/斜体/下划线,我会感到非常惊讶。也许是一个列表或分隔行的中断,但字体标签等是我不关心的,直到有人提出一个真正的用例。
      猜你喜欢
      • 2020-01-05
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2011-07-04
      • 2012-03-21
      • 1970-01-01
      相关资源
      最近更新 更多