JavaFX CSS Guide建议通过CSS设置混合模式,如下所示:

-fx-blend-mode: blue


但是在将以下CSS字符串应用于Text节点时,出现了异常:

-fx-blend-mode:green;
-fx-fill:rgba(0.501960813999176,0.4000000059604645,0.800000011920929,1.0);
-fx-font-size:52;
-fx-font-style:normal;
-fx-font-weight:normal


例外:

Dec 05, 2014 12:54:23 PM javafx.scene.CssStyleHelper calculateValue
WARNING: Caught 'java.lang.ClassCastException: javafx.scene.paint.Color cannot be
     cast to java.lang.String' while converting value for '-fx-blend-mode' from
     inline style on Text[text="Title At Company", x=0.0, y=0.0, alignment=LEFT,
     origin=BASELINE, boundsType=LOGICAL, font=Font[name=System Regular, family=System,
     style=Regular, size=13.0], fontSmoothingType=GRAY, fill=0x000000ff]


CSS字符串错误还是什么?
我只需要通过CSS应用混合模式。

最佳答案

如果尝试将属性-fx-blend-mode设置为其他可能的值,则大多数将可以使用。但是这些不是:addbluegreenred

通过一些调试,您可以找到调用此方法CSSParser.parse()来解析规则-fx-blend-mode:green;的方法:

if (needsLookup || ((value = colorValueOfString(str)) == null )) {
    value = new ParsedValueImpl<String,String>(str, null, isIdent || needsLookup);
}


您会看到,如果字符串(“绿色”,“红色”,“蓝色”)与颜色匹配,那么它将被解析为Color。然后该规则将失败,抱怨是因为它期望从字符串而不是从颜色解析的BlendMode枚举。

请注意,这也发生在add上,因为它已转换为0xaaddddff。

这里的解决方法是通过代码进行设置:

text.setBlendMode(BlendMode.GREEN);


最后,这些值将不起作用:src-insrc-out,因为它们已从BlendMode中删除​​。您无法通过代码设置它们,但仍可以通过CSS选择它们。您将收到以下警告:

Caught java.lang.IllegalArgumentException: No enum constant javafx.scene.effect.BlendMode.src_in' ...


如果您认为应解决此问题,请考虑向Jira提交错误。

10-07 12:59
查看更多