当前位置: 首页 > 知识库问答 >
问题:

使用带有十六进制代码/颜色的枚举

闻修筠
2023-03-14

我试图使用枚举来表示代码中的不同颜色。我的想法是接收一个十六进制代码,即String类型的FF0000,我想将其与枚举中的颜色值相关联。

类似于:

  • 我接受十六进制代码“#FF0000”
  • 我看了一下我的ColorList enum,发现#FF0000与红色关联
  • 我从枚举中得到红色值

所以我认为应该是这样的:

public enum ColorList {
     RED("#FF0000")

     ORANGE("FFA500")

     private String value;

     public String getValue() { return value; }

     ColorList(String value) { this.value = value; }

}

public void handleColor(String hexColor) {
     // hexColor is = "#FF0000"
     ColorList myColor = ColorList.valueOf(hexColor);
     doWithColor(myColor);
 
}

public void doWithColor(ColorList myColor) {
     System.out.println(myColor.name());
     // I expect RED 
     System.out.println(myColor.getValue());
     // I expect "#FFEDAB"

}

不知道如何填补这里的空白。我认为唯一的问题是试图从任意值(十六进制代码)获取枚举,所以我不能只使用valueOf(hexColor)。

共有2个答案

咸琪
2023-03-14

一种选择如下:

   public void handleColor(String hexColor) {
   ..
    for(ColorList ls :ColorList.values()){
      if(ls.getValue().equalIgnoreCase(hexColor)){
       System.out.println(ls.name()); // this prints RED for hexColor #FF0000
      }
    }
  ..
 }
齐俊达
2023-03-14

你可以这样做:

public enum ColorList {

    RED("#FF0000"),
    ORANGE("FFA500");

    private String value;
    
    public String getValue() { return value; }

    ColorList(String value) { this.value = value; }
    
    public static ColorList fromHex(String hexColor) {
        // if needed instead of loop,
        // you can create a static map to search by hex code
        for (ColorList color : ColorList.values()) {
            if (color.getValue().equals(hexColor)) {
                return color;
            }
        }
        return null;
    }

    // I'm not sure if you need this function. 
    public static ColorList fromHexOrName(String hexOrName) {
        // search by Hexadecimal value
        ColorList color = fromHex(hexOrName);
        if (color != null) {
            return color;
        }

        // else search by name 
        try {
            return ColorList.valueOf(hexOrName);
        }catch (IllegalArgumentException | NullPointerException e) {
            return null;
        }
    }
}

public void handleColor(String hexColor) {
    // hexColor is = "#FF0000"
    ColorList myColor = ColorList.fromHex(hexColor);
    // OR this call below if needed : 
    // ColorList myColor = ColorList.fromHexOrName(hexColor);
    doWithColor(myColor);

}

public void doWithColor(ColorList myColor) {
    System.out.println(myColor.name());
    // I expect RED 
    System.out.println(myColor.getValue());
    // I expect "#FFEDAB"
}
 类似资料:
  • 嘿,我在关注波士顿新闻的Android学习系列。我在这个部分:http://www.youtube.com/watch?feature=player_embedded 现在,我想做的是在某个地方(在代码或文件中)保存一些基本颜色,例如红色、绿色等,并为它们分配HEX代码。 比如,如果用户在“edittext”中键入“red”,那么我想将“red”的值存储为“#FF0000”(就像C中的#defin

  • 问题内容: 我正在一个项目中,我需要生成未定义数量的随机,十六进制颜色代码……我将如何在PHP中构建这样的函数? 问题答案: 获取0到255之间的随机数,然后将其转换为十六进制:

  • 问题内容: 我正在尝试在Swift中使用十六进制颜色值,而不是允许您使用的几个标准颜色值,但是我不知道该怎么做。 示例:如何将其用作颜色? 问题答案: 实际上是用十六进制表示的3种颜色分量- 红色,绿色和蓝色。您可以使用前缀在Swift中编写十六进制表示法,例如 为了简化转换,让我们创建一个采用整数(0-255)值的初始化程序: 用法: 如何获得阿尔法? 根据您的用例,您可以简单地使用本机方法,例

  • 问题内容: 我的应用程序中有一些滑块,允许用户更改ARGB颜色,但是我需要将这些值转换为十六进制值,如0xff000000,即纯黑色。 这是我到目前为止所拥有的: 但是,在获得如下所示的Integer值时,我得到了输入字符串“ 0xccffffff”的NumberFormatException: 关于如何将其转换为整数的任何想法?谢谢。 问题答案: Color参数必须在1f和0f之间浮动。因此,这

  • 问题内容: 标题 有没有一种方法可以将任意字符串映射到十六进制颜色代码。我尝试使用字符串哈希码计算字符串的十六进制数。现在,我需要将此十六进制数字转换为十六进制颜色代码范围内的六位数。有什么建议 ? 问题答案: 如果您不太在乎颜色的“含义”,则可以将int的位数拆分(将第一个仅删除RGB而不是ARGB)

  • 我想改变我的应用程序中的原色,所以我尝试: 但这不起作用,所以我检查了文档,找到了另一种方法,即使用 所以我的问题是:如何用十六进制颜色改变原色