如何在多行文本/标签中指定行高?
css似乎已经不支持它:
JavaFX CSS 不支持 -fx-font-family 属性中以逗号分隔的字体系列名称。不支持指定字体时的可选行高参数。font-variant 属性没有等效项。
是否有一个原因?
有没有其他方法可以在代码中设置它?还是有点模仿功能?我想在我的应用程序中控制垂直节奏。
Java 8+ 实现
RT-21683 允许更改行间距已实现以向 JavaFX Java 8添加行间距功能。
line spacibg API 通过 lineSpacing 属性和相关的 getter 和 setter 在 Text、TextFlow 和 Labeled 节点上定义。与 JavaFX 布局的其余部分一样,间距以像素为单位定义。
Java 2.2- 实现
如果您不能使用 Java 8+,您将需要自己实现行间距,例如,通过在 VBox 上为每行设置单独的 Text 节点的间距。
JavaFX 中单位度量的讨论
似乎有一个相应的(可样式化的)css属性?如果它以像素为单位定义,我如何让它知道 dpi
如果您使用 css 属性,它们可以与 em 单位一起使用。例如,请参阅默认的modena.css样式表,它以 em 单位测量几乎所有大小。这就是为什么如果您只使用默认样式而没有额外的基于像素的布局,那么如果您更改根字体大小,布局中的所有内容都会自动缩放。
只有 Java API 和 FXML 仅适用于像素单位。即便如此,JavaFX 系统还是足够聪明地知道(至少在某些机器上),它在 HiDPI 显示器(例如 OS X Retina)上运行,因此,例如,对于 Retina 显示器,像素单位自动加倍(在爪哇 8) .
如果您使用 FXML,则可以使用表达式绑定来定义自己的单位系统。
JavaFX 的未来版本可能会为 RT-14020 概念提供更多支持,以实现与屏幕分辨率无关的 GUI 定义。
示例代码
下面的示例使用 Java 8 来演示lineSpacing
api 和-fx-line-spacing
css 属性的用法。
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
public class LineSpacing extends Application {
public static void main(String[] args) { launch(LineSpacing.class); }
@Override public void start(Stage stage) {
Label label = new Label(
"Power is my mistress.\n" +
"I have worked too hard at her conquest " +
"to allow anyone to take her away from me.\n" +
" - Napoleon Bonaparte");
label.setPadding(new Insets(20));
// as the default font spacing in JavaFX is 13 points,
// all of the following lines will provide the same results
// (double spacing the label text).
//
// label.setLineSpacing(13);
// label.setStyle("-fx-line-spacing: 13px;");
label.setStyle("-fx-line-spacing: 1em;");
stage.setScene(new Scene(label));
stage.show();
}
}