默认情况下,标签页眉内的标签使用默认样式表modena.css中定义的“查找颜色”-fx-text-base-color
。因此,一个快速和肮脏的方法是只覆盖该颜色的定义:
randomTab.setStyle("-fx-text-base-color: green;");
这种方法的问题在于,什么都在选项卡(即未在标签标题)使用-fx-text-base-color
作为其文本填充也会改变文字颜色。大多数控件实际上使用-fx-text-background-color
作为文本(前景!)的颜色,所以你可能会用这种简单的方法逃脱。 (感谢jewelsea,他的评论使我认识到了这种方法的正确版本。)
也许一个更可靠的方法是定义您自己的“查找颜色”,为文本填充选项卡,然后更改其代码中特定选项卡的值。
在外部CSS文件,添加
.root {
-tab-text-color: -fx-text-base-color ;
}
.tab-label {
-fx-text-fill: -tab-text-color ;
}
现在改变-tab-text-color
值特定标签,做
randomTab.setStyle("-tab-text-color: green;");
这里有一个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);
}
}
哪里style.css是
.root {
-tab-text-color: -fx-text-base-color ;
}
.tab-label {
-fx-text-fill: -tab-text-color ;
}
给予
我认为他想设置前景色,而不是背景色,所以也许'randomTab.setStyle( “ - FX-文本的基础色:绿色;”) ;',而不是'randomTab.setStyle(“ - fx-text-background-color:green;”);'。请注意,这样做代码是这样的,而不是CSS中更具体的选择器将更改选项卡中所有文本的颜色(而不仅仅是选项卡标签标题)。 – jewelsea
@jewelsea查找的颜色'-fx-text-background-color'用于填充使用'-fx-background'作为背景颜色的区域的文本。即它是某些控件(包括标签)的文本前景色。请参阅[modena.css]中的'.root'和'.label'部分(http://hg.openjdk.java.net/openjfx/8u60/rt/file/996511a322b7/modules/controls/src/main/资源/ COM /阳光/ JavaFX的/场景/控制/护肤/摩德纳/ modena.css)。 –
哦,是这样,多么令人困惑;-) – jewelsea