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

4

我有以下JLabel代码:

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

我想做的是能够控制两行之间的行高/间距。
附注:我也尝试使用段落而不是换行符,但是效果相同。我不知道是否可以在html标签中这样做,而不使用css(在Java Swing的JLabel中无法在html代码中使用css)。
6个回答

4

这应该是有效的,但实际上并不是。不过color: green可以正常工作。

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

我猜行高不起作用。如果您要使用CSS,那么这就是您的操作方式,因此也许您无法以这种方式完成。 这里有一个很好的工具,您可以使用它快速测试您的HTML是否有效。


1
嗯..Swing中的CSS支持目前相当糟糕。line-height属性被建模但未呈现。CSS的Javadoc显示了哪些CSS属性得到了支持。 http://java.sun.com/javase/6/docs/api/index.html?javax/swing/text/html/CSS.html - David J. Liszewski
有没有不用 CSS 的方法来实现这个?同时也谢谢你提供的链接! - Stephane Grenier

3

请尝试使用HTMLEditorKit的setStyleSheet(...)方法。虽然我以前从未使用过它,但是我相信它提供了一些基本支持。

另外,您可以使用JTextPane控制行间距。我认为您可以使用:

StyleConstants.setLineSpacing(...);

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


2

嗯.. 在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>");

2
由于Java支持<p>标签和CSS margin属性,您可以使用以下解决方案:
new JLabel("<html>first line<p style='margin-top:-5'>second line");

现在不需要关闭html标签。


另外请注意:margin-top:-5px无效,但是margin-top:-5有效,原因不明... - Tustin2121
我使用了 margin-top: 5。 - user3832429

0
你可以尝试使用两个标签,并使用LayoutManager设置两者之间的距离以及空白。我自己喜欢GridBagLayout。
编辑:GridBagLayout。糟糕!

我必须说,这可能比搞编辑器工具包更加强大。 - Justin
这可能适用于只有两行的情况,但如果有多行呢? - Stephane Grenier
如果是多行文本,我会使用Text Pane,并采用camickr的解决方案。 - badpanda

-2

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接