javafx颜色解析

javafx颜色解析,java,parsing,javafx,colors,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.setSty

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

用户输入将转换为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背景色:0x4eacfff}:在[1,24]处出现意外标记'0x'”

我怀疑颜色(返回双精度)与-fx背景色冲突,后者需要一个十六进制(?)
我是否使用了错误的工具,或者我需要手动解包双精度并重铸为十六进制?

不要依赖
Color.toString()
生成可由CSS解析器解析的有效字符串。关于这一点,专家们非常明确:

返回此
颜色的字符串表示形式
。此方法仅用于提供信息。返回字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为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 + ";");

非常感谢,这很有帮助。