有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:将颜色字符串值转换为十六进制值

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

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

上述代码适用于除“黑色”以外的所有颜色

对于“黑色”颜色,它给出以下错误

String index out of range : 6 error

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


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    这绝对是错误的:

    colorpick.getValue().hashCode()
    

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

    这应该很好

    colorpick.getValue()
    
  3. # 3 楼答案

    既然您没有提到变量“colorpick”是什么类,我就假设它是ColorPicker(https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/ColorPicker.html

    我不认为它的hashcode()方法会被重写以十六进制返回RGB值

    错误的原因是black的RGB值为0。应用。toHexString()只会给你一个字符“0”,因此。子字符串()将不起作用。其他RGB值也可能导致字符串短于6

    我假设你希望结果总是6位数;然后,如果字符串较短,则应从开始处用0填充字符串

    编辑 颜色选择器。getValue()返回颜色对象,而不是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());