15

JavaFX ColorPicker で色を選択しました。ここで、16 進文字列として保存する必要があります。このメソッドを見つけましたが、JavaFX には適用できません。JavaFX には getRGB() メソッドのない独自の Color クラスがあり、仲介変換として使用できます。

4

7 に答える 7

4

現在受け入れられている答え

return String.format("#%02X%02X%02X",
    ((int)color.getRed())*255,
    ((int)color.getGreen())*255,
    ((int)color.getBlue())*255);

現在利用可能なものの中で最も有効な回答は、Zonのものです(参考までに以下を参照)

// 8 symbols.
  String hex1 = Integer.toHexString(myColorPicker.getValue().hashCode());

// With # prefix.
  String hex2 = "#" + Integer.toHexString(myColorPicker.getValue().hashCode()); 

// 6 symbols in capital letters.
  String hex3 = Integer.toHexString(myColorPicker.getValue().hashCode()).substring(0, 6).toUpperCase();

ただし、この方法では、先頭のゼロが自動的に削除されるという問題が発生します。色の 16 進値が 0 で始まる場合 (例: #000000、#00A3FF など)、最初のゼロは自動的に削除され、文字列が短すぎて 16 進コードとして完全に機能しなくなります。Color.BLACK は、不透明度のみを維持するため、16 進数の "#FF" を生成します。以下のメソッドは、JavaFX 8u112 の時点で、色から 16 進への変換を完全に解決します。

String colorToHex(Color color) {
    String hex1;
    String hex2;

    hex1 = Integer.toHexString(color.hashCode()).toUpperCase();

    switch (hex1.length()) {
    case 2:
        hex2 = "000000";
        break;
    case 3:
        hex2 = String.format("00000%s", hex1.substring(0,1));
        break;
    case 4:
        hex2 = String.format("0000%s", hex1.substring(0,2));
        break;
    case 5:
        hex2 = String.format("000%s", hex1.substring(0,3));
        break;
    case 6:
        hex2 = String.format("00%s", hex1.substring(0,4));
        break;
    case 7:
        hex2 = String.format("0%s", hex1.substring(0,5));
        break;
    default:
        hex2 = hex1.substring(0, 6);
    }
    return hex2;
}

これが私が経験したトラブルを誰かに救うことを願っています!

于 2016-10-31T05:28:49.380 に答える
2

getGreen()getBlue()getRed()メソッドを使用して、16 進数に変換できます。

    Color c;
    int green = c.getGreen()*255;
    Integer.toHexString(green);

赤と青についてこれを繰り返してから、次のようにします。

    String hexColor = "#"+red+green+blue;

これはアイデアであり、完全なコードです(コピーして貼り付けることができます):

    public class TestColor {

        public TestColor() {
            Color c = Color.ALICEBLUE;

             int green = (int) (c.getGreen()*255);
             String greenString = Integer.toHexString(green);

             int red = (int) (c.getRed()*255);
             String redString = Integer.toHexString(red);

             int blue = (int) (c.getBlue()*255);
             String blueString = Integer.toHexString(blue);

             String hexColor = "#"+redString+greenString+blueString;
             System.out.println(hexColor);
             System.out.println(c.toString());
        }
        public static void main(String[] args) {
            new TestColor();
        }
    }
于 2013-07-29T13:39:01.237 に答える