Почему порядок приоритета JavaFX CSS отличается для текста и элементов управления - PullRequest
0 голосов
/ 02 августа 2020

Я работаю над приложением Javafx, и я попытался добавить несколько меток, кнопок и текстов, размер которых изменяется, когда пользователь изменяет размер сцены. Все узлы находятся внутри VBox, который сам находится внутри StackPane.

Мое тестовое приложение:

public class Test extends Application 
{
    public static void main(String[] args) 
    {
        launch(args);
    }

    @Override
    public void start(final Stage primaryStage) 
    {           
        StackPane pane = new StackPane();
        VBox box = new VBox();
        box.setAlignment(Pos.CENTER);
        Label l = new Label("Label");
        Text t = new Text("Text");
        Button b = new Button("Button");
        pane.heightProperty().addListener(listener ->
        {
            double h = pane.getHeight()/5;          
            l.setFont(Font.font(l.getFont().getFamily(), h));
            t.setFont(Font.font(t.getFont().getFamily(), h));
            b.setFont(Font.font(b.getFont().getFamily(), h));
        });
        
        box.getChildren().addAll(l, t, b);
        pane.getChildren().add(box);
        primaryStage.setScene(new Scene(pane));
        primaryStage.getScene().getStylesheets().add(Path.of("test.css").toUri().toString());
        primaryStage.show();
    }
}

Если я изменяю размер Stage, он работает должным образом. После добавления моего файла css текст ведет себя иначе. Он продолжает меняться в размере, а метка и кнопка - нет.

Мой css файл:

{
   -fx-fill: red;
   -fx-font-family: impact;
   -fx-font-size: 2em;
}

JavaFX CSS руководство: https://openjfx.io/javadoc/14/javafx.graphics/javafx/scene/doc-files/cssref.html

Реализация JavaFX CSS применяет следующий порядок приоритета:

Реализация позволяет дизайнерам стилизовать приложение, используя таблицы стилей для переопределения свойства значения устанавливаются из кода. Например, вызов rectangle.setFill (Color.YELLOW) можно переопределить встроенным стилем или стилем из авторской таблицы стилей. Это имеет значение для каскада; в частности, когда стиль из таблицы стилей переопределяет значение, установленное из кода? В реализации JavaFX CSS применяется следующий порядок приоритета: стиль из таблицы стилей пользовательского агента имеет более низкий приоритет, чем значение, установленное из кода, который имеет более низкий приоритет, чем таблица стилей сцены или родительской таблицы. Встроенные стили имеют наивысший приоритет. c таблицы стилей из родительского экземпляра считаются более специфичными, чем стили из таблиц стилей сцены.

В моем случае это означает, что всем узлам не разрешено изменять свой размер, даже Текстовый узел. Из-за родительской таблицы стилей> значение, заданное кодом .

Мой вопрос:

Почему текстовый узел игнорирует порядок приоритета, соответственно следует правилу противоположности Родительская таблица стилей <значение, заданное кодом </strong>?

Спасибо за помощь!

...