如何在多行文本/标签中指定行高?
它似乎在css中不受支持:
JavaFX CSS不支持以逗号分隔的字体系列 -fx-font-family属性中的名称。可选的行高 不支持指定字体时的参数。没有 等效于font-variant属性。
这是否有原因?
是否可以在代码中设置此选项?或者有点模仿功能?我想在我的应用程序中控制垂直节奏。
答案 0 :(得分:3)
Java 8+实现
实现RT-21683 Allow to change line-to-line spacing以向JavaFX Java 8添加行间距功能。
行spacibg API通过lineSpacing属性和关联的getter和setter在Text,TextFlow和Labeled节点上定义。间距以像素为单位定义,与JavaFX布局的其余部分一样。
Java 2.2-实现
如果您不能使用Java 8+,则需要自己实现行间距,例如:通过在VBox上设置每行的单独文本节点的间距。
讨论JavaFX中的单元测量
似乎有一个相应的(可设置的)css属性?如果它以像素为单位定义,我该如何使其成为dpi识别
如果您使用它们,css属性工作可以与em单位一起使用。例如,请参阅默认的modena.css样式表,该样式表以em为单位测量几乎所有尺寸。这就是为什么如果您只使用没有基于像素的布局的默认样式,那么如果您更改根字体大小,布局中的所有内容都会自动缩放。
只有Java API和FXML才能使用像素单元。即使这样,JavaFX系统也足够聪明地知道(至少在某些机器上)它在HiDPI显示器(例如OS X视网膜)上运行,例如,pixel units are automatically doubled for the retina display (in Java 8)。
如果您使用FXML,可以use expression bindings作为定义自己的单位系统的方法。
JavaFX的未来版本可能会为RT-14020 Concept for a screen resolution independent definition of a 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();
}
}