Изменить цвет шрифта в JavaFX через файл. css - PullRequest
1 голос
/ 02 марта 2020

Может кто-нибудь сказать, почему -fx-text-fill в приведенном ниже примере не работает для изменения цвета шрифта? -fx-инсульт это то, что я тоже пробовал. Спасибо!

Java Файл:

package SimpleTextFromCSS;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;

public class Main extends Application
{
    @Override
    public void start(Stage primaryStage)
    {
        GridPane rootGP = new GridPane();
        Label centerText = new Label("Sample text.");
        rootGP.getChildren().add(centerText);
        Scene scene = new Scene(rootGP,1200,800);
        scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());

        primaryStage.setScene(mainScene);
        primaryStage.show();
        }
    }
    public static void main(String[] args)
    {
        launch(args);
    }
}

CSS:

.root{
  -fx-font-family: "Broadway";
  -fx-font-size: 50pt;
  -fx-text-fill: blue;
}

1 Ответ

3 голосов
/ 02 марта 2020

Как отмечено в комментариях (благодаря @ Slaw ), свойство -fx-text-fill по умолчанию не наследуется, поэтому установка его для панели root не позволит распространяться вниз до метки в вашем интерфейсе. Возможное исправление будет состоять в том, чтобы определить свойство, скажем, .label, но лучший подход состоит в том, чтобы подключиться к функциональности "тематика" таблицы стилей по умолчанию ("modena"). Следует признать, что документация по этому вопросу довольно тонкая, но чтение комментариев в исходном коде CSS , особенно в верхней части файла, показывает, как это должно работать.

Модена определяет «искомый цвет», называемый -fx-text-background-color, который используется для текста, нарисованного поверх фона, заполненного -fx-background-color. A Label - это такой текст, и таблица стилей по умолчанию устанавливает текстовую заливку метки на -fx-text-background-color.

Таким образом, один из подходов заключается в переопределении значения -fx-text-background-color:

.root{
  -fx-font-family: "Broadway";
  -fx-font-size: 50pt;
  -fx-text-background-color: blue;
}

Если вы хотите быть немного более изощренным, значение по умолчанию -fx-text-background-color на самом деле является «лестницей», которая выбирает цвет в зависимости от интенсивности фона. Само по себе оно определяется тремя другими цветами:

  • -fx-light-text-color (для темного фона, который по умолчанию белый),
  • -fx-mid-text-color (для светлого фона, который по умолчанию до светло-серого) и
  • -fx-dark-text-color (для средних фонов, по умолчанию черный).

Так что если вы хотите решение, которое было бы визуально устойчивым к изменениям в фон метки, вы можете сделать

.root{
  -fx-font-family: "Broadway";
  -fx-font-size: 50pt;

  -fx-dark-text-color: navy ;
  -fx-mid-text-color: blue ;
  -fx-light-text-color: skyblue ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...