JavaFX - 在css中获取混合模式的类转换异常

时间:2014-12-05 07:50:19

标签: css javafx javafx-8

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应用混合模式。

1 个答案:

答案 0 :(得分:5)

如果您尝试使用其他可能的值设置属性-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);
}

你可以看到,如果字符串(&#34;绿色&#34;,&#34;红色&#34;,&#34;蓝色&#34;)与颜色匹配,那么它将被解析为{{ 1}}。然后规则将失败,抱怨因为它期望Color枚举,从字符串解析,而不是从颜色解析。

请注意BlendMode也会发生这种情况,因为它已转换为0xaaddddff。

此处的解决方法是按代码设置:

add

最后,这些值不起作用:text.setBlendMode(BlendMode.GREEN); src-in,因为它们已从src-out中移除。您无法通过代码设置它们,但您仍然可以通过CSS选择它们。你会收到这个警告:

BlendMode

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