Java 从颜色实例获取表示颜色名称的字符串

Java 从颜色实例获取表示颜色名称的字符串,java,reflection,colors,awt,Java,Reflection,Colors,Awt,如何从color类的实例中获取表示颜色名称(而不是awt RGB代码)的字符串 比如我有 Color black=Color.BLACK; 我想得到字符串“Black” 我知道使用Java反射应该可以做到这一点,但我对它不是很熟悉。谢谢。您可以使用预定义的map在其上插入一些预先定义的颜色,然后使用它获取名称 HashMap<Color,String> hm = new HashMap <Color,String>(); hm.put(Color.BLACK,"Blac

如何从color类的实例中获取表示颜色名称(而不是awt RGB代码)的字符串

比如我有

Color black=Color.BLACK;
我想得到字符串
“Black”


我知道使用Java反射应该可以做到这一点,但我对它不是很熟悉。谢谢。

您可以使用预定义的
map
在其上插入一些预先定义的颜色,然后使用它获取名称

HashMap<Color,String> hm = new HashMap <Color,String>();
hm.put(Color.BLACK,"Black");
.
.
.
hm.get(Color.BLACK)
HashMap hm=newhashmap();
hm.put(颜色。黑色,“黑色”);
.
.
.
hm.get(颜色:黑色)

您可以使用预定义的
映射
在其上插入一些预先定义的颜色,然后使用它获取名称

HashMap<Color,String> hm = new HashMap <Color,String>();
hm.put(Color.BLACK,"Black");
.
.
.
hm.get(Color.BLACK)
HashMap hm=newhashmap();
hm.put(颜色。黑色,“黑色”);
.
.
.
hm.get(颜色:黑色)

您可以使用预定义的
映射
在其上插入一些预先定义的颜色,然后使用它获取名称

HashMap<Color,String> hm = new HashMap <Color,String>();
hm.put(Color.BLACK,"Black");
.
.
.
hm.get(Color.BLACK)
HashMap hm=newhashmap();
hm.put(颜色。黑色,“黑色”);
.
.
.
hm.get(颜色:黑色)

您可以使用预定义的
映射
在其上插入一些预先定义的颜色,然后使用它获取名称

HashMap<Color,String> hm = new HashMap <Color,String>();
hm.put(Color.BLACK,"Black");
.
.
.
hm.get(Color.BLACK)
HashMap hm=newhashmap();
hm.put(颜色。黑色,“黑色”);
.
.
.
hm.get(颜色:黑色)

Color
类只有很少几个非静态字段

name      | type         
----------+---------------
value     | int 
frgbvalue | float[] 
fvalue    | float[] 
falpha    | float 
cs        | java.awt.color.ColorSpace 
并且这些字段都不存储颜色名称。此外,它没有任何方法可以检查您使用的颜色是否等于其预定义颜色之一,并存储在静态引用中,如

public final static Color black = new Color(0, 0, 0);
public final static Color BLACK = black;
但是,没有什么可以阻止您实现自己的方法,它可以为您实现。这种方法看起来像

public static Optional<String> colorName(Color c) {
    for (Field f : Color.class.getDeclaredFields()) {
        //we want to test only fields of type Color
        if (f.getType().equals(Color.class))
            try {
                if (f.get(null).equals(c))
                    return Optional.of(f.getName().toLowerCase());
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // shouldn't not be thrown, but just in case print its stacktrace
                e.printStackTrace();
            }
    }
    return Optional.empty();
}
输出:

black
no name found
no name found

Color
类只有很少几个非静态字段

name      | type         
----------+---------------
value     | int 
frgbvalue | float[] 
fvalue    | float[] 
falpha    | float 
cs        | java.awt.color.ColorSpace 
并且这些字段都不存储颜色名称。此外,它没有任何方法可以检查您使用的颜色是否等于其预定义颜色之一,并存储在静态引用中,如

public final static Color black = new Color(0, 0, 0);
public final static Color BLACK = black;
但是,没有什么可以阻止您实现自己的方法,它可以为您实现。这种方法看起来像

public static Optional<String> colorName(Color c) {
    for (Field f : Color.class.getDeclaredFields()) {
        //we want to test only fields of type Color
        if (f.getType().equals(Color.class))
            try {
                if (f.get(null).equals(c))
                    return Optional.of(f.getName().toLowerCase());
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // shouldn't not be thrown, but just in case print its stacktrace
                e.printStackTrace();
            }
    }
    return Optional.empty();
}
输出:

black
no name found
no name found

Color
类只有很少几个非静态字段

name      | type         
----------+---------------
value     | int 
frgbvalue | float[] 
fvalue    | float[] 
falpha    | float 
cs        | java.awt.color.ColorSpace 
并且这些字段都不存储颜色名称。此外,它没有任何方法可以检查您使用的颜色是否等于其预定义颜色之一,并存储在静态引用中,如

public final static Color black = new Color(0, 0, 0);
public final static Color BLACK = black;
但是,没有什么可以阻止您实现自己的方法,它可以为您实现。这种方法看起来像

public static Optional<String> colorName(Color c) {
    for (Field f : Color.class.getDeclaredFields()) {
        //we want to test only fields of type Color
        if (f.getType().equals(Color.class))
            try {
                if (f.get(null).equals(c))
                    return Optional.of(f.getName().toLowerCase());
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // shouldn't not be thrown, but just in case print its stacktrace
                e.printStackTrace();
            }
    }
    return Optional.empty();
}
输出:

black
no name found
no name found

Color
类只有很少几个非静态字段

name      | type         
----------+---------------
value     | int 
frgbvalue | float[] 
fvalue    | float[] 
falpha    | float 
cs        | java.awt.color.ColorSpace 
并且这些字段都不存储颜色名称。此外,它没有任何方法可以检查您使用的颜色是否等于其预定义颜色之一,并存储在静态引用中,如

public final static Color black = new Color(0, 0, 0);
public final static Color BLACK = black;
但是,没有什么可以阻止您实现自己的方法,它可以为您实现。这种方法看起来像

public static Optional<String> colorName(Color c) {
    for (Field f : Color.class.getDeclaredFields()) {
        //we want to test only fields of type Color
        if (f.getType().equals(Color.class))
            try {
                if (f.get(null).equals(c))
                    return Optional.of(f.getName().toLowerCase());
            } catch (IllegalArgumentException | IllegalAccessException e) {
                // shouldn't not be thrown, but just in case print its stacktrace
                e.printStackTrace();
            }
    }
    return Optional.empty();
}
输出:

black
no name found
no name found
可能对你有帮助可能对你有帮助可能对你有帮助