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