【问题标题】:Java : Convert Color string value to Hexa valueJava:将颜色字符串值转换为十六进制值
【发布时间】:2017-02-13 08:42:27
【问题描述】:

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

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

上面的代码对于除了“黑色”颜色之外的所有颜色都是Ok

“黑色”颜色出现以下错误。

String index out of range : 6 error

请问有什么办法可以解决我的问题吗?

【问题讨论】:

  • 好吧,很酷的故事,虽然缺乏角色发展。你有问题吗?
  • 问清楚!!!我认为你的意思是,你的代码给出了输入值“黑色”的错误。对吗?
  • 查看colorpick.getValue()的返回值。我认为,问题来自那部分。
  • 是的,我的问题是为什么它适用于除黑色以外的所有颜色

标签: java string colors hex


【解决方案1】:

这绝对是错误的:

colorpick.getValue().hashCode()

hashcode 是 JVM 生成的特定代码,用于管理与实例和哈希表相关的哈希数......与颜色无关......

这应该还不错

colorpick.getValue()

【讨论】:

  • 当我运行代码System.out.println(Integer.toHexString(Color.BLACK.hashCode()));,它给了我结果ff000000。所以,我认为问题不在于hashCode()
  • hashCode 的颜色方法来自 int java.awt.Color.hashCode()。所以,它是与使用相关的。
  • 删除子字符串时出现此错误,Integer 类型中的 toHexString(int) 方法不适用于参数(颜色)
【解决方案2】:

由于您没有提到变量“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()

编辑2
有无.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());

【讨论】:

【解决方案3】:

使用 try catch 函数来处理它。如果错误十六进制

【讨论】:

  • 这不是答案。你应该在问题下写评论
猜你喜欢
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2018-01-22
  • 2013-12-03
  • 2012-11-01
  • 2019-10-29
  • 2012-02-03
相关资源
最近更新 更多