关于java:JavaFX更改选项卡中文本的字体颜色

JavaFX change the font color of text in a tab

我想动态更改TabPane的标签标签中文本的颜色。

在SceneBuilder中,我为选项卡指定了randomTab的名称。

在我的代码中,我具有以下内容:

1
2
3
4
    if (randomEnabled)
        randomTab.setStyle("-fx-color:Green;");
    else
        randomTab.setStyle("-fx-color:Black;");

但是,这不会更改文本的颜色,而是会更改选项卡标签背景的颜色。

我尝试使用" -fx-text-fill:Green"以及" -fx-foreground-color:Green",但是这些都不起作用。


默认情况下,选项卡标题内的标签使用默认样式表modena.css中定义的"查找颜色" -fx-text-base-color。因此,一种快捷方法只是覆盖该颜色定义:

1
randomTab.setStyle("-fx-text-base-color: green;");

这种方法的问题在于,使用-fx-text-base-color作为其文本填充的选项卡中其他任何内容(即不在选项卡标题中)也将更改文本颜色。实际上,大多数控件都使用-fx-text-background-color作为文本颜色(前景!),因此您可能会摆脱这种简单的方法。 (感谢jewelsea,他的评论使我找到了此方法的正确版本。)

可能更可靠的方法是为选项卡中的文本定义自己的"查找颜色",然后为代码中的特定选项卡更改其值。

在您的外部CSS文件中,添加

1
2
3
4
5
6
7
.root {
    -tab-text-color: -fx-text-base-color ;
}

.tab-label {
    -fx-text-fill: -tab-text-color ;
}

现在要更改特定选项卡的-tab-text-color值,请执行

1
randomTab.setStyle("-tab-text-color: green;");

这是一个SSCCE:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TabStyleTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        TabPane tabPane = new TabPane();
        Tab tab1 = new Tab("Tab 1");
        tab1.setContent(new StackPane(new Label("Tab 1")));
        tab1.setStyle("-tab-text-color: green;");
        Tab tab2 = new Tab("Tab 2");
        tab2.setContent(new StackPane(new Label("Tab 2")));
        tabPane.getTabs().addAll(tab1, tab2);
        Scene scene = new Scene(tabPane, 600, 600) ;
        scene.getStylesheets().add("style.css");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

style.css在哪里

1
2
3
4
5
6
7
.root {
    -tab-text-color: -fx-text-base-color ;
}

.tab-label {
    -fx-text-fill: -tab-text-color ;
}

给予

enter image description here


看,您可以在您的CSS文件中添加

1
2
.tab-label {
-fx-text-fill: white;

}

//白色是您的颜色,也可以添加十六进制,白色-> #ffffff