通过 .css 文件更改 JavaFX 中的字体颜色

Var*_*est 2 css javafx

有人可以告诉我为什么下面示例中的-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);
    }
}
Run Code Online (Sandbox Code Playgroud)

CSS:

.root{
  -fx-font-family: "Broadway";
  -fx-font-size: 50pt;
  -fx-text-fill: blue;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*s_D 5

正如评论中所指出的(感谢@Slaw),-fx-text-fill默认情况下不会继承该属性,因此为根窗格设置它不会允许它向下传播到 UI 中的标签。一个可能的解决方法是定义属性,例如.label,但更好的方法是挂钩默认样式表(“modena”)的“主题”功能。诚然,有关此内容的文档非常薄弱,但阅读CSS 源代码中的注释(尤其是文件顶部的注释)可以了解其工作原理。

Modena 定义了一种称为 的“查找颜色” -fx-text-background-color,用于在填充 的背景上绘制的文本-fx-background-color。ALabel就是这样的文本,默认样式表将标签的文本填充设置为-fx-text-background-color

因此一种方法是重新定义-fx-text-background-color值:

.root{
  -fx-font-family: "Broadway";
  -fx-font-size: 50pt;
  -fx-text-background-color: blue;
}
Run Code Online (Sandbox Code Playgroud)

如果你想更复杂一点,默认值-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 ;
}
Run Code Online (Sandbox Code Playgroud)