我想动态更改TabPane的标签标签中文本的颜色。
在SceneBuilder中,我为选项卡指定了randomTab的名称。
在我的代码中,我具有以下内容:
if (randomEnabled)
randomTab.setStyle("-fx-color:Green;");
else
randomTab.setStyle("-fx-color:Black;");
Run Code Online (Sandbox Code Playgroud)
但是,这不会更改文本的颜色,而是会更改选项卡标签背景的颜色。
我已经尝试使用“ -fx-text-fill:Green”以及“ -fx-foreground-color:Green”,但是这些都不起作用。
默认情况下,选项卡标题中的标签使用-fx-text-base-color
默认样式表modena.css中定义的“查找颜色” 。因此,一种快捷方法只是覆盖该颜色定义:
randomTab.setStyle("-fx-text-base-color: green;");
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于,标签中-fx-text-base-color
用作文本填充的任何其他内容(即不在标签标题中)也会更改文本颜色。大多数控件实际上都-fx-text-background-color
用作文本(前景!)颜色,因此您可能会摆脱这种简单的方法。(感谢jewelsea,他的评论使我找到了此方法的正确版本。)
可能更可靠的方法是为选项卡中的文本定义自己的“查找颜色”,然后为代码中的特定选项卡更改其值。
在您的外部CSS文件中,添加
randomTab.setStyle("-fx-text-base-color: green;");
Run Code Online (Sandbox Code Playgroud)
现在要更改-tab-text-color
特定标签的值,请执行
randomTab.setStyle("-tab-text-color: green;");
Run Code Online (Sandbox Code Playgroud)
这是一个SSCCE:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
style.css在哪里
.root {
-tab-text-color: -fx-text-base-color ;
}
.tab-label {
-fx-text-fill: -tab-text-color ;
}
Run Code Online (Sandbox Code Playgroud)
给予
归档时间: |
|
查看次数: |
5180 次 |
最近记录: |