有人可以告诉我为什么下面示例中的-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)
正如评论中所指出的(感谢@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)