2

如何在多行文本/标签中指定行高?

css似乎已经不支持它:

JavaFX CSS 不支持 -fx-font-family 属性中以逗号分隔的字体系列名称。不支持指定字体时的可选行高参数。font-variant 属性没有等效项。

是否有一个原因?

有没有其他方法可以在代码中设置它?还是有点模仿功能?我想在我的应用程序中控制垂直节奏。

4

1 回答 1

4

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 来演示lineSpacingapi 和-fx-line-spacingcss 属性的用法。

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();
    }
}
于 2013-08-14T07:00:56.040 回答