2013-07-22 69 views
2

我正在通過CSS挖掘自定義控件,而且我得到了很多。所以我可以通過例如完全自定義我的滾動條。將曲目的背景設置爲透明等。但我堅持ScrollBarSkin(通過ScenicViewer調查)。看起來這個皮膚有一個默認的背景顏色(漸變)和邊框,我不能修改。 所以我的問題是,我如何訪問TableCellSkin或ScrollBarSkin,通過CSS修改背景顏色和插圖?JavaFX 2.2:通過CSS修改皮膚樣式

編輯:我使用JDK7

EDIT2:我發現在caspian.css爲ScrollPaneSkin一些語法。我試過相同的滾動條和一個tablecell:

ScrollBarSkin>* { 
    -fx-base: transparent; 
    -fx-border-color: #00ff00; 
    -fx-background-color: #0000ff; 
    } 

但沒有運氣。

基於jewelsea的回答找到解決方案(感謝隊友!)

我做了一個新的類擴展ScrollBarSkin,我重寫getSkinnable()。這看起來像這樣:

public class MyScrollBarSkin extends ScrollBarSkin{ 

    public MyScrollBarSkin(ScrollBar scrollBar) { 
     super(scrollBar); 

    } 

    @Override 
    public Insets getInsets() { 
     // TODO Auto-generated method stub 
     return super.getInsets(); 
    } 

    @Override 
    public ScrollBar getSkinnable() { 
     ScrollBar curr = super.getSkinnable(); 
     curr.getSkin().getNode().setStyle("-fx-background-color: transparent;"); 
     return curr; 
    } 
} 

在相應的CSS我指的是這個皮膚jewelsea提到。 Et瞧!

還剩下一個小問題:爲什麼我無法通過css直接訪問此組件?

回答

3

ScrollBarSkin是表示用於呈現ScrollBar的外觀的類。下面是從一個默認的JavaFX的樣式表的提取物:

.scroll-bar { 
    -fx-skin: "com.sun.javafx.scene.control.skin.ScrollBarSkin"; 
} 

這裏是JavaFX的8個源存儲庫ScrollBarSkin.java的鏈接。請注意,它是一個com.sun類,因此它不是公共API的一部分,並且可能會在小的JavaFX版本之間消失或更改API,恕不另行通知。

您可以在用戶通過樣式以下CSS覆蓋使用自己的皮膚默認皮膚:

.scroll-bar { 
    -fx-skin: "com.mycompany.control.skin.CustomScrollBarSkin"; 
} 

我剛纔提出的名稱和路徑,你可以使用任何你想要的。

皮膚所允許的是程序控制一個控件的外觀(即它只是偶然與css相關,因爲css是在控件上設置皮膚的一種方法)。

Customizing Skins is documented(在某種程度上)在OpenJFX wiki中。

皮膚定製依賴於一個名爲SkinBase的新JavaFX 8類,它構成了javafx.scene.control公共API的一部分。

不推薦在低於Java 8的版本中自定義皮膚,因爲那時您將使用舊的,未公開的和不受支持的私有API,這些API不適用於Java 8及更高版本。在Java 8中定製外觀很好,因爲它依賴於公共API。

我很確定你的問題,這不是你真正想要的,但它是你的問題的答案(至少據我瞭解)。

+0

thx! +1。爲我澄清事情。我想我必須忍受苦澀的私生活...... –