如何在 Java Swing 中的 JLabel 中设置行距/高度?

Posted

技术标签:

【中文标题】如何在 Java Swing 中的 JLabel 中设置行距/高度?【英文标题】:How to set line spacing/height in a JLabel in Java Swing? 【发布时间】:2011-03-08 00:04:36 【问题描述】:

我有以下 JLabel 代码:

JLabel someJLabel = new JLabel("<html>first line<br>second line</html>");
someJLabel.setFont(new Font("Arial", Font.PLAIN, 16));

我想做的是能够控制两条线之间的线高/间距。

PS:我也研究过使用段落而不是断线,但这是一回事。而且我不知道您是否可以在不使用 css 的情况下在 html 标记中执行此操作(您不能在 Java Swing 的 JLabel 的 html 代码中使用 css)。

【问题讨论】:

【参考方案1】:

您可以尝试使用两个标签,并使用 LayoutManager 设置两者之间的距离以及空白。我自己喜欢 GridBoxLayout。

编辑:GridBagLayout。哎呀!

【讨论】:

我不得不说这可能会比编辑工具包更强大。 如果你只有 2 行这可能有效,但如果它是多行呢? 如果是多行,我会使用文本窗格,带有 camickr 的解决方案。【参考方案2】:

查看 HTMLEditorKit 的 setStyleSheet(...) 方法。我以前从未使用过它,但我相信它提供了一些基本支持。

否则,您可以使用 JTextPane 来控制行距。我想你会使用:

StyleConstants.setLineSpacing(...);

然后您可以更改前景/背景等,使文本窗格看起来像一个标签。

【讨论】:

【参考方案3】:

这应该有效,但事实并非如此。 color: green 可以工作。

content.add(new JLabel("&lt;html&gt;&lt;p style=\"line-height: 150%;\"&gt;hi&lt;br&gt;world&lt;/p&gt;&lt;/html&gt;"));

我猜 line-height 不起作用。如果你要使用 CSS,你会这样做,所以也许你不能那样做。 Here's a nice tool我发现你可以用它来测试你的 HTML 是否能快速运行。

【讨论】:

Ya .. Swing 中的 CSS 支持目前非常糟糕。 line-height 属性已建模但未渲染。 CSS 的 Javadoc 显示了支持哪些 CSS 属性。 java.sun.com/javase/6/docs/api/index.html?javax/swing/text/html/… 没有css有没有办法做到这一点?也感谢您提供链接!【参考方案4】:

设置空白边框有帮助吗,比如

label.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));

方法语法 BorderFactory.createEmptyBorder(int top, int left, int bottom, int right)

【讨论】:

【参考方案5】:

嗯 .. JLabel 中的 CSS 似乎对我有用,如果有人坚持支持的属性。试试padding(或margin)和font-size

someJLabel = new JLabel("<html><body><p style=\"padding:10; font-size:30\">First line</p><p style=\"padding:10; font-size:20\">Second line</p></body></html>");

【讨论】:

【参考方案6】:

由于 Java 支持

标签和 CSS ma​​rgin 属性,您可以使用下一个解决方案:

new JLabel("<html>first line<p style='margin-top:-5'>second line");

附:现在不需要关闭html标签了。

【讨论】:

另请注意:margin-top:-5px 不起作用,但 margin-top:-5 可以,无论出于何种原因... 我使用 margin-top: 5

以上是关于如何在 Java Swing 中的 JLabel 中设置行距/高度?的主要内容,如果未能解决你的问题,请参考以下文章

将 JLabel 数组导入 JComponent

Java Swing JLabel、HTML 和自定义字体

如何让 Swing 将我自己的 HTMLEditorKit 用于 JLabel/JButton/等

200分 Java Swing 刷新问题

Swing 中的 Java 继承/重用能力

Swing JLabel:强制重绘()