Javafx如何不将CSS样式应用于Label

时间:2015-01-17 16:50:21

标签: css javafx label color-picker

在我的Java GUI中,我有大约50个标签。所有这些都将使用CSS样式进行格式化。但是有5种我希望使用像这样的

的ColorPicker来改变字体颜色
 Color ch = lineCommentColorPicker.getValue();
 if (ch != null) {
            lineCommentColorLabel.setTextFill(ch);
 }

我的问题。如何避免使用setTextFill方法设置的颜色将被为“.label”类定义的CSS样式规则再次覆盖

.label
{
    -fx-text-fill: black;
    -fx-font-weight: bold;
   -fx-font-size: 12;
}

2 个答案:

答案 0 :(得分:5)

您可以使用

删除标签样式
lineCommentColorLabel.getStyleClass().remove("label");

并应用合适的样式。或者你可以在其他标签上添加一个样式表,除了那些你想要手动着色的标签:

.myclass
{
    -fx-text-fill: red;
}

lineCommentColorLabel.getStyleClass().add("myclass");

答案 1 :(得分:1)

背景资讯

JavaFX CSS reference guide中有一些偏好信息:

  

来自用户代理样式表的样式的优先级低于从代码设置的值,该代码的优先级低于Scene或Parent样式表。内联样式具有最高优先级。来自Parent实例的样式表被认为比Scene样式表中的样式更具体。

另请注意,应用程序只有一个user agent stylesheet,它通常是JavaFX的内置标准样式表(例如,用于JavaFX 8的modena.css)。通常,应用程序不会覆盖此样式表。

因此,设置标签文本填充的场景样式表将优先于内联代码,该代码设置标签的文本填充 - 只要内部JavaFX实现决定将CSS应用于场景图形,css规则就会生效

潜在解决方案

结合

解决这个问题的一种愚蠢方法是以下声明:

customizedLabel.textFillProperty().bind(colorPicker.valueProperty());

这是有效的,因为无法设置绑定值。一旦执行绑定,CSS实现就无法将标签填充重置为另一个值。

注意你的风格规则

另一种处理方法是确保您不要在场景样式表中为要自定义代码文本填充的标签设置-fx-text-fill。这基本上就是罗兰" myclass"或删除"标签" styleclass解决方案。

修改UserAgent样式表

您还可以复制标准JavaFX样式表,直接修改它,并使用setUserAgentStylesheet在您的应用程序上设置它,然后您可以在代码中覆盖用户代理样式表所做的任何css设置。我只考虑您正在部署到受控JavaFX运行时(例如,作为独立的应用程序部署),并且可以在更新运行时更新用户代理样式表。