【问题标题】:JavaFX - Getting class cast exception in css for blend modeJavaFX - 在混合模式的 css 中获取类转换异常
【发布时间】:2014-12-05 07:50:19
【问题描述】:

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

【问题讨论】:

  • 如何申请css?你能显示代码吗?

标签: css javafx javafx-8


【解决方案1】:

如果您尝试将属性-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);
}

可以看到,如果字符串 ("green", "red", "blue") 匹配一个颜色,那么它将被解析为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 提交错误。

【讨论】:

  • 感谢您的指出。似乎 JavaFX CSS 有很多错误,并且不是通过代码使用样式节点的完整替代方案。你能建议解决我的另一个 CSS 问题吗?效果链 (stackoverflow.com/questions/27293885/…)
  • 您可以通过代码或 FXML 链接效果。但不是由 CSS。您想要这些选项中的任何一个的答案吗?
  • @Rutaraj JavaFX CSS 不应该是通过代码设置节点样式的完整替代方案(尽管它非常灵活,您可以单独在 CSS 中进行大量样式设置)。是的,JavaFX CSS 处理确实有一些错误,但是(根据我对最近 JavaFX 版本的经验),这些问题很少遇到。当然,对于您发现的问题,您应该 file a bug report - 与 StackOverflow 上记录的问题相比,错误跟踪器中的问题更有可能得到解决。
  • @JoséPereda 建议使用 FXML。如果可能的话,还建议一种将效果存储在 DB/JSON 字符串中的方法,以便在不使用 CSS 字符串的情况下重现精确的效果。
  • @RuturajPatil 我已经用代码和 FXML 回答了与链效应相关的问题。按照应用程序的顺序,它易于存储和复制。顺便说一句,你看到我对你的question 的回答了吗?有没有cmets?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 2015-08-06
  • 2020-12-25
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
相关资源
最近更新 更多