Java:将颜色字符串值转换为Hexa值

时间:2016-10-05 03:18:35

标签: java string colors hex

我正在尝试将颜色值更改为颜色hexa代码。所以,我这样编码:

color = Integer.toHexString(colorpick.getValue().hashCode()).substring(0, 6).toUpperCase();

以上代码确定适用于除" Black" 颜色以外的所有颜色。

它为" Black" 颜色提供以下错误。

String index out of range : 6 error

请问我的问题有什么解决方案吗?

3 个答案:

答案 0 :(得分:2)

这绝对是错误的:

colorpick.getValue().hashCode()

hashcode是由JVM生成的一个特定代码,用于管理与实例和散列表相关的哈希值...并且与颜色没有任何关系。

这应该不仅仅是好的

colorpick.getValue()

答案 1 :(得分:1)

既然你没有提到变量" colorpick"是的,我将假设它是ColorPicker(https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ColorPicker.html)。

我不认为它的hashcode()方法被覆盖以返回十六进制的RGB值。

你的错误的原因是黑色的RGB值为0.应用.toHexString()只会给你" 0",一个字符,因此.substring()不会工作。其他RGB值也可能导致字符串短于6.

我假设您希望结果始终为6位数;那么你应该从一开始就用0填充字符串,如果它更短的话。

修改 ColorPicker.getValue()返回Color对象,而不是RGB值。 所以你应该使用colorpick.getValue()。getRGB()代替。

https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html#getRGB()

<强> EDIT2
有和没有.getRGB():

Color c = Color.CYAN;
String s = Integer.toHexString(c.getRGB() & 0xFFFFFF).toUpperCase();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6 - s.length(); i++) {
    sb.append("0");
}
sb.append(s);
System.out.println(sb.toString());

Color c = Color.CYAN;
int rgbValue = (c.getRed() << 16) + (c.getGreen() << 8) + c.getBlue();
String s = Integer.toHexString(rgbValue & 0xFFFFFF).toUpperCase();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 6 - s.length(); i++) {
    sb.append("0");
}
sb.append(s);
System.out.println(sb.toString());

答案 2 :(得分:0)

使用try catch函数来处理它。如果错误为hexa