JavaFX GridPane,VBox,HBox是否有預定義的CSS類? 我找不到CSS reference中的任何東西,但它似乎很奇怪,默認組件沒有定義。用於GridPane,VBox,VBox的JavaFX CSS類
如果沒有一個預先定義的類,有沒有更好的辦法,而不是手動添加類上的所有網格:
GridPane pane = new GridPane();
pane.getStyleClass().add("grid-pane");
JavaFX GridPane,VBox,HBox是否有預定義的CSS類? 我找不到CSS reference中的任何東西,但它似乎很奇怪,默認組件沒有定義。用於GridPane,VBox,VBox的JavaFX CSS類
如果沒有一個預先定義的類,有沒有更好的辦法,而不是手動添加類上的所有網格:
GridPane pane = new GridPane();
pane.getStyleClass().add("grid-pane");
沒有,只有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;
}
將採用「藍色主題」整個應用程序,傳播查到的顏色和屬性默認爲「繼承」的所有子節點。
謝謝。任何想法應用CSS多昂貴?你能推薦一些閱讀材料嗎? :) – 2014-10-20 16:07:45
不,我不知道應用CSS是多麼昂貴;有趣的是CSS開發者似乎對性能非常關注。我只是在OTN上記住[此討論](https://community.oracle.com/thread/3570580)。請注意,如果您使用的是控件(按鈕,標籤等),那麼無論如何都必須完成CSS傳球。 – 2014-10-20 16:14:30
有趣。感謝你! – 2014-10-20 16:15:35
是的,有一種方法。只要看看這個[問題](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