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中定义的"查找颜色"
1 | randomTab.setStyle("-fx-text-base-color: green;"); |
这种方法的问题在于,使用
可能更可靠的方法是为选项卡中的文本定义自己的"查找颜色",然后为代码中的特定选项卡更改其值。
在您的外部CSS文件中,添加
1 2 3 4 5 6 7 | .root { -tab-text-color: -fx-text-base-color ; } .tab-label { -fx-text-fill: -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 ; } |
给予
看,您可以在您的CSS文件中添加
1 2 | .tab-label { -fx-text-fill: white; |
}
//白色是您的颜色,也可以添加十六进制,白色-> #ffffff