2013-07-29 10 views

Antwort

4

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(); 
+1

Das ist einfacher, gut gemacht. – Marc

+3

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

+1

gute Arbeit, das hilft mir –

2

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(); 
     } 
    } 
+0

das funktioniert nicht. Wenn eine Komponente Null ist, ist es nur "0" anstelle von "00". –

28

Ü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)); 
    } 
} 
+0

Die einzige Variante unter den Antworten hier funktioniert gut, ohne Ausnahmen für Schwarz und andere einfache Farben. – Dragon

0

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; 
    } 

} 
2

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!

+0

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