2012-10-17 80 views
2

是否可以在沒有CSS的情況下風格化JavaFX組件?我的意思是:我可以達到什麼我可以實現與CSS沒有CSS? 「沒有CSS字符串」我的意思是「沒有CSS字符串」(你把東西放在setStyle(String)風格沒有CSS的JavaFX組件

對於我來說,通過創建新的樣式字符串來更新樣式似乎效率很低,要動態地將背景顏色更改爲白色(事先不知道)在下面的風格我也有正則表達式或concate字符串來取代它。

-fx-background-color: red; 
-fx-border-color: black; 
-fx-border-width: 1; 

我相信,在內部這些字符串無論如何都會被解析到一些結構/對象爲什麼不是這些結構暴露?

我對JavaFX非常陌生,我知道我可以使用CSS繼承,但它不是銀色的子彈,在那裏應該仍然是一些字符串連接。

回答

3

從JavaFX 2.2開始,只有通過應用css才能完成一些風格的方面。區域背景顏色和邊界信息在問題中的定義屬於「只能通過css完成的事情」類別。

通過在css樣式表中定義不同的樣式類並操作節點的styleclasses,可以進行樣式設置。這是推薦使用css的方式,而不是使用setStyle方法。您還可以更改應用於場景或節點層次結構的樣式表的列表。但是,這實際上只是以不同的方式使用CSS,而不是沒有CSS的樣式。

風格的某些方面可以在fxml或java代碼中完成,因爲它們暴露在JavaFX API中,例如,您可以使用setFont api或fxml字體屬性在標籤上設置字體,而比使用css風格-fx-font將字體應用於標籤。

在未來的JavaFX版本中(例如JavaFX 8),這些東西中的很多還會有一個公共API,您可以使用這些公共API在代碼中應用樣式而不使用CSS。特別是對於JavaFX 8.0,已經定義了新的API,它們公開了區域背景和邊框樣式屬性以進行編程操作。見RT-24506: Public API for Region backgrounds and borders。這應該允許您以編程方式完成您在問題中提供的示例樣式。

另外,針對未來的JavaFX版本提出了CSS信息的對象模型,以便除了基於當前字符串的setStyle和getStyleClass方法外,還可以通過正式Java API查看和操作節點上的CSS屬性。請參閱RT-17293: CSS Style Object Model in Java。如果您對此類功能感興趣,請投票選擇功能請求。