Высота текстовой строки

Как я могу указать высоту строки в многострочном тексте / метке?

Уже кажется, что это не поддерживается в css:

JavaFX CSS не поддерживает серию имен семейств шрифтов, разделенных запятыми, в свойстве -fx-font-family. Необязательный параметр высоты строки при указании шрифтов не поддерживается. Для свойства font-variant нет эквивалента.

Для этого есть причина?

Есть ли альтернатива, чтобы установить это в коде? Или как бы имитировать функциональность? Я хочу контролировать вертикальный ритм в своем приложении.


person QuidNovi    schedule 14.08.2013    source источник


Ответы (1)


Реализация Java 8+

RT-21683 Разрешить изменение межстрочного интервала была реализована для добавления функция межстрочного интервала для JavaFX Java 8.

API-интерфейс line spacibg определяется на узлах Text, TextFlow и Labeled через свойство lineSpacing и связанные с ним геттеры и сеттеры. Интервал определяется в пикселях, как и остальная часть макета JavaFX.

Реализация Java 2.2

Если вы не можете использовать Java 8+, вам нужно будет самостоятельно реализовать межстрочный интервал, например Установив интервал в VBox с отдельными текстовыми узлами для каждой строки.

Обсуждение единиц измерения в JavaFX

Кажется, есть соответствующее (стилизованное) свойство css? Если он определен в пикселях, как мне сделать его с учетом dpi

css properties work могут работать с модулями em, если вы их используете. См., Например, значение по умолчанию modena.css, которая измеряет почти все размеры в единицах em. Вот почему, если вы просто используете стили по умолчанию без дополнительного макета на основе пикселей, то при изменении размера корневого шрифта все в макете автоматически масштабируется.

Только API Java и FXML работают только с пиксельными блоками. Даже в этом случае система JavaFX достаточно умна, чтобы знать (по крайней мере, на некоторых машинах), что она работает на дисплее HiDPI (например, OS X retina), так что, например, единицы пикселей автоматически удваиваются для дисплея Retina (в Java 8).

Если вы используете FXML, вы можете использовать привязки выражений как способ определить вашу собственную систему единиц.

Будущие версии JavaFX могут обеспечить дополнительную поддержку RT-14020 Concept для независимого от разрешения экрана определения 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();
    }
}
person jewelsea    schedule 14.08.2013
comment
Я использую JavaFX 8, так что это приятно слышать. Кажется, есть соответствующее (стилизованное) свойство css? Если он определен в пикселях, как мне сделать его с учетом dpi? - person QuidNovi; 14.08.2013
comment
@QuidNovi Я обновил этот ответ, чтобы ответить на ваши дополнительные вопросы. - person jewelsea; 15.08.2013
comment
Большое спасибо за ваш ответ. Если пиксели автоматически адаптируются к dpi / уже независимым от устройства пикселям, я просто буду везде использовать пиксели (code + css: я не использую fxml). - person QuidNovi; 15.08.2013