2017-05-09 64 views
1

我有以下規則SplitPane和css文件:現在嵌套元素更改CSS規則編程

.split-pane > .split-pane-divider { 
    -fx-padding: 0 0 0 1; 
    -fx-background-color:-fx-background; 
} 

,在運行時我需要改變這些規則來分隔。我試圖

SplitPane.Divider divider = splitPane.getDividers().get(0); 
divider.setStyle("-fx-padding: 1 1 1 1; -fx-background-color:-fx-background;"); 

但在SplitPane.Divider類沒有方法setStyle

如何在運行時更改這些規則?

回答

2

一種可能性是在CSS文件中定義一個新的風格類:

.split-pane > .split-pane-divider { 
    -fx-padding: 0 0 0 1; 
    -fx-background-color: green; 
} 

.modified-split-pane > .split-pane-divider { 
    -fx-padding: 1 1 1 1; 
    -fx-background-color: red; 
} 

然後根據需要修改的一個或原來代碼中的添加/刪除此樣式類:

// Modified style 
splitPane.getStyleClass().add("modified-split-pane"); 
// Original style 
splitPane.getStyleClass().remove("modified-split-pane") 

您還可以使用PseudoClass API:

.split-pane > .split-pane-divider { 
    -fx-padding: 0 0 0 1; 
    -fx-background-color: green; 
} 

.split-pane:version1 > .split-pane-divider { 
    -fx-padding: 1 1 1 1; 
    -fx-background-color: red; 
} 

然後在代碼的主動/停用此僞類:

PseudoClass version1Pseudo = PseudoClass.getPseudoClass("version1"); 
splitPane.pseudoClassStateChanged(version1Pseudo, true); 
splitPane.pseudoClassStateChanged(version1Pseudo, false); 

還有一個方法可行設置由從現場得到的分頻器Node S IN運行時的樣式屬性直接在代碼-graph使用Node#lookupAll(或lookup)方法,但我強烈建議避免這種方法

for (Node node: splitPane.lookupAll(".split-pane-divider")) 
    node.setStyle("-fx-background-color: red; -fx-padding: 1 1 1 1;");