我正在尝试将颜色值更改为颜色hexa
代码。所以,我这样编码:
color = Integer.toHexString(colorpick.getValue().hashCode()).substring(0, 6).toUpperCase();
以上代码确定适用于除" Black" 颜色以外的所有颜色。
它为" Black" 颜色提供以下错误。
String index out of range : 6 error
请问我的问题有什么解决方案吗?
答案 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