JavaFX 8 Label垂直文本行间距过大问题求助
解决JavaFX 8 Label垂直文本行间距过大的问题
这个问题我太熟悉了!用prefWidth=0加wrapText=true实现垂直文本时,-fx-line-spacing: 0没效果的原因是——它只控制行与行之间的额外间距,而每行本身的高度(行高)还是默认的大于字体实际高度的值,所以字符之间还是会有明显的空隙。
解决这个问题的关键是调整-fx-line-height属性,它控制每行的总高度(包含字体本身和上下的默认间距)。默认的line-height通常是1.2左右,所以即使你把line-spacing设为0,行高本身还是会撑开间距。
给你一个可用的CSS方案:
#label_north { -fx-line-spacing: 0; /* 清除额外行间距 */ -fx-line-height: 1; /* 让行高等于字体高度,这是核心 */ /* 如果需要更紧凑,可以尝试0.9,根据字体大小调整 */ /* -fx-line-height: 0.9; */ }
你也可以直接把样式内联到Label标签里:
<Label fx:id="label_north" style="-fx-line-spacing: 0; -fx-line-height: 1;" alignment="BOTTOM_CENTER" prefHeight="240.0" prefWidth="0.0" textAlignment="CENTER" wrapText="true"> <padding> <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> </padding> </Label>
原理说明
-fx-line-spacing:仅控制两行文本之间额外添加的间距,默认是0,但如果行高本身大,还是会有空隙。-fx-line-height:设置每行的高度相对于字体大小的倍数,设为1时,行高刚好等于字体的em高度,字符上下的默认空隙就被去掉了,垂直排列的字符就会紧凑很多。
如果调整后还有细微间距,可以检查一下字体本身的内置间距(有些字体本身字符上下有留白),这时候可以尝试微调-fx-line-height到小于1的值,比如0.85,直到达到你想要的效果。
内容的提问来源于stack exchange,提问作者Irash
相关产品推荐
相关产品推荐

