2017-09-21 184 views
1

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

在SceneBuilder中,我给了tab一个randomTab的名字。

在我的代码,我有以下几点:

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

然而,这并没有改变文本的颜色,它改变了标签的标签的背景颜色。

我试过“-fx-text-fill:Green”,以及“-fx-foreground-color:Green”,但都没有任何效果。

回答

2

默认情况下,标签页眉内的标签使用默认样式表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 ; 
} 

给予

enter image description here

+0

我认为他想设置前景色,而不是背景色,所以也许'randomTab.setStyle( “ - FX-文本的基础色:绿色;”) ;',而不是'randomTab.setStyle(“ - fx-text-background-color:green;”);'。请注意,这样做代码是这样的,而不是CSS中更具体的选择器将更改选项卡中所有文本的颜色(而不仅仅是选项卡标签标题)。 – jewelsea

+0

@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)。 –

+0

哦,是这样,多么令人困惑;-) – jewelsea

相关问题