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
设置为其他可能的值,则大多数将可以使用。但是这些不是: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);
}
您会看到,如果字符串(“绿色”,“红色”,“蓝色”)与颜色匹配,那么它将被解析为
Color
。然后该规则将失败,抱怨是因为它期望从字符串而不是从颜色解析的BlendMode
枚举。请注意,这也发生在
add
上,因为它已转换为0xaaddddff。这里的解决方法是通过代码进行设置:
text.setBlendMode(BlendMode.GREEN);
最后,这些值将不起作用:
src-in
和src-out
,因为它们已从BlendMode
中删除。您无法通过代码设置它们,但仍可以通过CSS选择它们。您将收到以下警告:Caught java.lang.IllegalArgumentException: No enum constant javafx.scene.effect.BlendMode.src_in' ...
如果您认为应解决此问题,请考虑向Jira提交错误。