【问题标题】:How to override (edit) CSS colors at runtime?如何在运行时覆盖(编辑)CSS颜色?
【发布时间】:2017-09-13 06:48:51
【问题描述】:

我希望用户可以通过设置菜单编辑应用 UI 颜色。 默认颜色在 .css 文件中定义,例如:

.vertex {
   -fx-fill: rgba(64, 196, 255, 1);
}

在上面的示例中,我想将 -fx-fill color 覆盖为用户将从颜色拾取对话框中选择的任何内容。是否可以在运行时更新 CSS 类属性?怎么样?

【问题讨论】:

    标签: css javafx colors


    【解决方案1】:

    您可以在 CSS 文件中使用查找颜色:

    .vertex {
        -vertex-fill: rgba(64, 196, 255, 1);
        -fx-fill: -vertex-fill ;
    }
    

    然后您可以在运行时使用内联样式对其进行修改。您可以在组件的任何祖先上调用setStyle(),它将应用于所有后代组件。例如。要将更改应用于样式类.vertex 的场景中的所有内容,请设置场景根的样式:

    Color selectedColor = colorPicker.getValue();
    int red = (int) (255 * selectedColor.getRed());
    int green = (int) (255 * selectedColor.getGreen());
    int blue = (int) (255 * selectedColor.getBlue());
    double opacity = selectedColor.getOpacity();
    String userColor = String.format("rgba(%d, %d, %d, %f)", red, green, blue, opacity) ;
    scene.getRoot().setStyle("-vertex-fill: " + userColor + " ;");
    

    【讨论】:

    • 如何引用具体的 CSS 类?我认为您的示例在 .root 类中设置了变量。此外,我没有在问题中明确提出这个问题,我也不期待答案,但这对颜色编辑很重要 - 如何将颜色从 .css 转换(读取)为 Color 对象?
    • @ievgen 外部文件中的 CSS 将 -vertex-color 的值应用于 CSS 类 vertex 的任何内容的填充。 Java 代码更改root 元素的-vertex-color 的值,这将把该值应用于根节点的所有后代。所以效果将是用 CSS 样式类vertex 更改根节点的所有后代的填充。我添加了用于创建所选颜色的字符串表示的代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多