【问题标题】:How to automatically break the text of a JLabel with ... when it gets too long with MigLayout?当 MigLayout 太长时,如何自动打破 JLabel 的文本?
【发布时间】:2013-11-29 21:06:52
【问题描述】:

例如,让JLabel 通常在文本足够短时显示其文本:

世界你好!

但是当它变得太长时自动用“...”打破它:

女士们,先生们您好……

当您使用 MigLayout 时,有什么方法可以做到这一点吗?在其他布局中,这是默认行为,但在 MigLayout 中显然不是...

【问题讨论】:

  • 我认为默认行为。
  • @AndrewThompson 抱歉,刚刚发现是因为我使用了 MigLayout。是的,对于其他布局,它可以做到这一点。使用 MigLayout 它不是出于某种原因。
  • 我从未使用过MigLayout,但我相当确定它在添加建议/支持最大尺寸的 GUI 元素时具有布局约束。跨度>
  • @AndrewThompson Nope :( 看截图
  • 向我展示一个不会发送到 ... 的文本的屏幕截图绝不能让我相信 MigLayout 没有这种能力。

标签: java swing jlabel layout-manager miglayout


【解决方案1】:

不完全确定我理解您所说的“中断”是什么意思:我假设您希望显示省略号(表示标签更长)而不是简单地切断文本。

  • 当标签的大小小于文本要求时,会显示省略号
  • 标签的 minSize 与其首选值大致相同
  • 默认情况下,MigLayout 的组件大小不会低于其最小值

因此,您必须通过使用组件约束否决组件的最小值来明确允许管理器的大小小于最小值:

content.add(new JLabel("we are looooong and getting longer by the minute"), "wmin 0");

(也可能在列约束上,没有检查)

【讨论】:

    【解决方案2】:

    将其放在<html> 标签内并使用<br /> 添加新行

    Mylabel.setText("<html><div style=\"text-align: center;\">"+
                        "First Line <br />"+
                        "Second Line</html>"
                    );
    

    这看起来像

                     ----------------------
                     |    First Line      |
                     |    Second Line     | 
                     ----------------------
    

    【讨论】:

    • 不。我看了一眼标题就想到了,但这不是 OP想要的。另外,当有CSS 时不要使用&lt;br /&gt; 来更好地完成工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多