2017-05-09 34 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;");