javafx 颜色解析

标签 java parsing javafx colors

尝试让用户为其显示选择自定义配色方案。

用户输入变成了 javafx.scene.paint.Color c1。 c1 是有效的颜色。但是,当我将它输入 setStyle 方法时,出现解析器错误:

    System.out.println("c1 values: R" + c1.getRed()+ " G:"+ c1.getGreen()+" B:" + c1.getBlue());
    Button test = new Button("test");
    test.setStyle("-fx-background-color: " + c1);
    Scene login = new Scene(test,640,480);
    stage.setScene(login);
    stage.show();

c1 是一个有效的颜色: “c1值:R0.30588236451148987 Gb0.6745098233222961 B:1.0”

但是出现解析错误: “警告:CSS 错误解析 '*{-fx-background-color: 0x4eacffff}:[1,24] 处出现意外标记 '0x'”

我怀疑 Color(返回 double 值)与 -fx-background-color 冲突,后者需要 HEX ( ? ) 我是不是使用了错误的工具,还是我需要手动解压 double 并重新转换为十六进制?

最佳答案

不要依赖 Color.toString() 来生成可由 CSS 解析器解析的有效字符串。 Javadocs对此非常明确:

Returns a string representation of this Color. This method is intended to be used only for informational purposes. The content and format of the returned string might vary between implementations. The returned string might be empty but cannot be null.

(我的重点)。

您可以使用 web 友好的十六进制格式格式化颜色

String webFormat = String.format("#%02x%02x%02x",
    (int) (255 * c1.getRed()),
    (int) (255 * c1.getGreen()),
    (int) (255 * c1.getBlue()));

如果你想允许透明度,你可以做类似的事情

String webFormat = String.format("rgba(%d, %d, %d, %f)",
    (int) (255 * c1.getRed()),
    (int) (255 * c1.getGreen()),
    (int) (255 * c1.getBlue()),
    c.getOpacity());

那当然是用

test.setStyle("-fx-background-color: " + webFormat + ";");

关于javafx 颜色解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44331780/

相关文章:

java - 加载和运行jsp文件报错

JavaFX GUI因切换场景而卡住

java - 错误: Could not find or load main class on Docker

javax.swing.text.ElementIterator 奇怪的行为

php - 使用 simple_html_dom 解析 HTML 表格

perl - Lexing/Parsing "here"文档

JavaFX-11 与 VSCode

java - Retrofit 2 请求没有给我数据

java - 构建可重用的 Wicket 组件

java - Pig JVM java堆空间错误