2017-06-02 69 views
0

嘗試讓用戶爲其顯示選擇自定義顏色方案。javafx顏色解析

用戶輸入變成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-背景色:0x4eacffff}:意外令牌 '在0X'[1,24]」

我懷疑的顏色(返回雙打)與-fx-ba衝突ckground-color正在期待HEX(? ) 我是否使用了錯誤的工具,或者是否需要手動解壓雙工並重新編譯爲HEX?

回答

3

不要依靠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 + ";"); 
+0

非常感謝,這是非常有幫助的。 –