Ich habe Farbe in JavaFX ColorPicker ausgewählt. Jetzt muss ich es als Hex-String speichern. Ich fand this Methode, aber für JavaFX ist es nicht anwendbar. JavaFX hat eine eigene Color-Klasse ohne getRGB() -Methode, die als Mediator-Konvertierung verwendet werden könnte.Wie bekomme ich Hex Web String aus JavaFX ColorPicker Farbe?
Antwort
Dies funktioniert der Trick:
// 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();
Sie können die getGreen()
, getBlue()
, getRed()
Methoden verwenden und in Hex konvertieren.
Color c;
int green = c.getGreen()*255;
Integer.toHexString(green);
wiederholt dies für Rot und Blau dann:
String hexColor = "#"+red+green+blue;
Das ist die Idee, der vollständige Code (copy-verpastbarem):
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();
}
}
das funktioniert nicht. Wenn eine Komponente Null ist, ist es nur "0" anstelle von "00". –
Übersetzen Sie eine Farbe in ein Web Farbcode:
public class FxUtils
{
public static String toRGBCode(Color color)
{
return String.format("#%02X%02X%02X",
(int)(color.getRed() * 255),
(int)(color.getGreen() * 255),
(int)(color.getBlue() * 255));
}
}
Die einzige Variante unter den Antworten hier funktioniert gut, ohne Ausnahmen für Schwarz und andere einfache Farben. – Dragon
Ich denke, dass ich eine bessere Lösung habe.
Ich hoffe, es hilft.
import javafx.scene.paint.Color;
/**
*
* @author Marcos Martinewski Alves
*/
public class ColorUtils {
public static String colorToHex(Color color) {
return colorChanelToHex(color.getRed())
+ colorChanelToHex(color.getGreen())
+ colorChanelToHex(color.getBlue())
+ colorChanelToHex(color.getOpacity());
}
private static String colorChanelToHex(double chanelValue) {
String rtn = Integer.toHexString((int) Math.min(Math.round(chanelValue * 255), 255));
if (rtn.length() == 1) {
rtn = "0" + rtn;
}
return rtn;
}
}
Die derzeit akzeptierte Antwort von
return String.format("#%02X%02X%02X",
((int)color.getRed())*255,
((int)color.getGreen())*255,
((int)color.getBlue())*255);
Die meisten Arbeits Antwort unter den derzeit verfügbaren ist Zon ist (unten als Referenz)
// 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();
jedoch dieses Verfahren läuft in der Frage der Automatisches Entfernen von Anfangs- Nullen. Wenn die Hexadezimalwerte einer Farbe mit Nullen beginnen (z. B. # 000000, # 00A3FF, usw.), werden die Anfangsnullen automatisch entfernt, sodass die Zeichenfolge zu kurz ist, um vollständig als Hexadezimalcode zu funktionieren. Color.BLACK erzeugt Hex "#FF", da es nur seine Deckkraft beibehält. Die folgende Methode, ab JavaFX 8u112, löst die Konvertierung von Farbe zu Hex vollständig.
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;
}
Hoffe, das spart jemand die Schwierigkeiten, die ich durchgemacht habe!
Ihre erste Lösung erzeugt nur Nullen auf jeder Java-Version, da das Casting eine höhere Priorität hat. Daher multiplizieren Sie grundsätzlich immer '0 * 255' – Midnightas
Das ist einfacher, gut gemacht. – Marc
Dies ist eine zerbrechliche Lösung. Die Generierung von Hash-Code ist implementierungsabhängig, daher ist nicht sichergestellt, dass es in späteren Releases funktioniert. (Zum Beispiel, wenn ein anderes Feld in den Hash-Code wie Opacy enthalten ist.) – Balage1551
gute Arbeit, das hilft mir –