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应用混合模式。
答案 0 :(得分:5)
如果您尝试使用其他可能的值设置属性-fx-blend-mode
,则大多数值都可以使用。但这些不是:add
,blue
,green
和red
。
通过一些调试,您可以找到已调用此方法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提交错误。