2014-10-19 50 views
2

JavaFX GridPane,VBox,HBox是否有預定義的CSS類? 我找不到CSS reference中的任何東西,但它似乎很奇怪,默認組件沒有定義。用於GridPane,VBox,VBox的JavaFX CSS類

如果沒有一個預先定義的類,有沒有更好的辦法,而不是手動添加類上的所有網格:

GridPane pane = new GridPane(); 
pane.getStyleClass().add("grid-pane"); 
+0

是的,有一種方法。只要看看這個[問題](http://stackoverflow.com/questions/35290665/javafx-style-all-nodes-of-the-same-type-e-g-vbox/35291537#35291537)。 – Amin 2016-04-28 09:20:48

回答

3

沒有,只有Control子類都默認CSS類定義。我認爲這是因爲想要管理自己的圖形的應用程序(例如使用Canvas或非託管Shapes)可能不會使用css,但仍可能會使用這些佈局窗格。由於應用於場景圖形的css代價昂貴,因此不一定要求它們的節點不具有樣式類別。

我不認爲有什麼方法可以將樣式類添加到窗格中,而不像顯示的那樣。顯然,如果你需要大量的GridPane s的相同樣式類,你可以定義一個方法,以避免重複代碼:

private GridPane createGridPane() { 
    GridPane grid = new GridPane(); 
    grid.getStyleClass().add("grid-pane"); 
    return grid ; 
} 

更新

需要注意的是,如基於HTML CSS,您可以使用基於類型的選擇器以及基於樣式類的選擇器,如documentation中所述。任何節點的默認樣式類都是其簡單的類名稱。這樣,就可以通過類型選擇選擇網格窗格:

GridPane { 
    /* styles ... */ 
} 

這感覺有點脆弱的對我說:特別是如果你繼承GridPane,選擇將不再適用,這是一種對象 - 非常反直覺面向視角。我會建議在類型選擇器上使用樣式類。

另請注意,如果您想要更改整個應用程序的顏色方案(或者僅僅是場景圖的子圖),可能是最常見的用例,您可以簡單地爲一些標準的查找顏色。例如:

.root { 
    -fx-base: #bfe7ff; 
    -fx-accent: #0096c9 ; 
    -fx-default-button: #abd8ed ; 
    -fx-focus-color: #039ed3; 
    -fx-faint-focus-color: #039ed322; 
    -fx-focused-text-base-color : ladder(
      -fx-selection-bar, 
      -fx-light-text-color 45%, 
      -fx-dark-text-color 46%, 
      -fx-dark-text-color 59%, 
      -fx-mid-text-color 60% 
     ); 
    -fx-focused-mark-color : -fx-focused-text-base-color ; 

    -fx-font-family: verdana; 
} 

將採用「藍色主題」整個應用程序,傳播查到的顏色和屬性默認爲「繼承」的所有子節點。

+0

謝謝。任何想法應用CSS多昂貴?你能推薦一些閱讀材料嗎? :) – 2014-10-20 16:07:45

+1

不,我不知道應用CSS是多麼昂貴;有趣的是CSS開發者似乎對性能非常關注。我只是在OTN上記住[此討論](https://community.oracle.com/thread/3570580)。請注意,如果您使用的是控件(按鈕,標籤等),那麼無論如何都必須完成CSS傳球。 – 2014-10-20 16:14:30

+0

有趣。感謝你! – 2014-10-20 16:15:35