2011-10-24 23 views
5

我正在嘗試學習JavaFX 2,但我一直在試圖風格化我的應用程序。我發現this document試圖記錄控件和應用於它們的CSS屬性。我不知道它是否不完整,如果我應該使用一些未知的選擇器,或者JavaFX的CSS支持不足以滿足我的需求。JavaFX CSS屬性和選擇器的最佳參考

這裏有幾個例子:(?是有一個選擇,或者一個屬性)

  • 我會怎樣改變一個TabPane後面的區域的背景顏色不着色所有其他子組件
  • 我將如何更改未選擇的選項卡的顏色?

回答

10

你有沒有嘗試過這樣的事情?

這使用了一個ID選擇器,如「使用CSS清理JavaFX應用程序」文檔中所示。您也可以不使用「#MyTabPane」選擇器,並將其應用於所有TabPane。 (它看起來像.tab和.tab內容區域選擇器沒有在參考指南中討論過,我去了包含在jfxrt.jar文件中的「caspian.css」文件來查找它們。)

TabExample。 CSS

#MyTabPane .tab { 
    -fx-background-color: blue; 
} 
#MyTabPane .tab:selected { 
    -fx-background-color: red; 
} 

#MyTabPane .tab-content-area { 
    -fx-background-color: cyan; 
} 

#MyTabPane .tab *.tab-label { 
    -fx-text-fill: white; 
} 

TabPaneEx.java

@Override 
    public void start(Stage primaryStage) { 
     primaryStage.setTitle("Hello World"); 
     StackPane root = new StackPane(); 
     TabPane pane = new TabPane(); 
     pane.setId(("MyTabPane")); 
     Tab tab1 = new Tab("ONE"); 
     Tab tab2 = new Tab("TWO"); 
     Tab tab3 = new Tab("THREE"); 
     pane.getTabs().addAll(tab1,tab2,tab3); 
     Scene scene = new Scene(root, 300, 250); 
     root.getChildren().add(pane); 
     scene.getStylesheets().add(
       this.getClass().getClassLoader().getResource("tabpaneex/TabExample.css").toString()); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 
+0

這正是我一直在尋找(除了.tab-header-background之外,我還在caspian.css中找到了它)。這是一個恥辱,沒有一個更完整的參考文件,但我想這將隨着時間的推移。 –

+0

很棒的回答。爲了簡單起見,有沒有一種方法可以從java.ma上訪問標籤部件?我正在思考一些tabPane.getTabContent.setStyle()的內容? –

5
+0

這些文件都沒有,似乎對這些問題的解決方案。我能否認爲JavaFX的CSS功能不夠我的需求?如果是這樣,我是否需要創建一個自定義皮膚?如果沒有訪問Oracle的原始皮膚(在com.sun包中),我想這將是很多工作。 –

+0

我不確定你想要什麼,但這應該是相似的。 – JimClarke

+1

請注意第二個文檔中的指令,以從JavaFX Jar提取默認CSS文件: 'jar -xf jfxrt.jar com/sun/javafx/scene/control/skin/caspian/caspian.css' – metasim