2017-06-02 6 views
0

ユーザーが表示用にカスタムのカラースキームを選択できるようにする。javafx色解析

ユーザーの入力はjavafx.scene.paint.Color c1に変わります。 c1は有効な色です。

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は有効な色である:しかし、私はたsetStyleメソッドにそれを供給するとき、パーサー・エラーがあり "C1値:R0.30588236451148987 Gb0.6745098233222961 B:1.0"

しかし、構文解析エラーがあります: "WARNING:CSSの解析エラー「* { - FX-背景色:0x4eacffff}:予期しないトークン '0X' での[1,24]"

私は(色を疑いますdoubleを返す)が-fx-baと衝突していますckground-HEXを期待している色? ) 私は間違ったツールを使用していますか、私は手動でダブルスを解凍して16進数に変換する必要がありますか?

答えて

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.

(私の強調)。

あなたは、透明性を許可したい場合は、あなたが

を使用し、もちろんその後

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

ような何かを行うことができ

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

でウェブフレンドリーな16進形式の色をフォーマットすることができます

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

ありがとう、非常に役に立ちます。 –

関連する問題