将String转换为java.awt.Color

时间:2017-10-04 17:06:44

标签: java string colors

我正在尝试将String对象转换为java.awt.Color对象。

我正在扫描用户的输入颜色。用户输入颜色,颜色保存在String中。我想将这种颜色变成ArrayList的{​​{1}}种颜色。我该怎么做?

String

我如何实现这一目标?

3 个答案:

答案 0 :(得分:4)

如何通过反思来做到这一点?

 Color color = (Color)Color.class.getField(str).get(null);
 colorArray.add(color);

如果用户输入的颜色不是Color类中的字段,您可能需要进行一些异常处理。

但请注意,此技术仅适用于类java.awt.Color提供静态实例成员的某些基本颜色。例如。 class目前仅提供以下静态实例成员:

  • 蓝色
  • 青色
  • darkGray或DARK_GRAY
  • lightGray或LIGHT_GRAY
  • 灰色
  • 绿色
  • 品红
  • 粉红色
  • 红色
  • 黄色

对于绿松石等其他颜色,您必须使用适当的RGB组合构建Color对象。

答案 1 :(得分:2)

以下是一个如何使用Java 9进行操作的示例:

In [1]: from random import Random

In [2]: my_random = Random()

In [3]: my_random.seed(234)

In [4]: my_random.randint(0, 99)
Out[4]: 43

In [5]: my_random.randint(0, 99)
Out[5]: 33

In [6]: my_random.seed(234)

In [7]: my_random.randint(0, 99)
Out[7]: 43

In [8]: my_random.randint(0, 99)
Out[8]: 33

这是样本运行的输出:

public static void main(String[] args) throws ParseException, ClassNotFoundException {
    Scanner sc = new Scanner(System.in);
    System.out.println("\nEnter your color\n" +
            "BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");

    List<Color> colorArray= new ArrayList<>();
    Map<String, Color> colorMap = Map.ofEntries(entry("BLUE", Color.BLUE),
            entry( "BLACK", Color.BLACK),
            entry( "ORANGE", Color.ORANGE)); // TODO: add more colours
    while(sc.hasNext()) {
        String next = sc.next();
        Color c = colorMap.get(next);
        if(c == null) {
            if("END".equals(next)) {
                break;
            }
            System.err.printf("Sorry, could not find %s%n", next);
        }
        else {
            colorArray.add(c);
            System.out.printf("Added %s%n", c);
        }
    }
    System.out.println(colorArray);
}

这是基于使用反射的@VHS想法的另一个版本:

Enter your color
BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:
> BLUE
Added java.awt.Color[r=0,g=0,b=255]
> BLACK
Added java.awt.Color[r=0,g=0,b=0]
> ORANGE
Added java.awt.Color[r=255,g=200,b=0]
> END
[java.awt.Color[r=0,g=0,b=255], java.awt.Color[r=0,g=0,b=0], java.awt.Color[r=255,g=200,b=0]]

理想情况下,您将结合两种想法(使用地图和反射),以便在java.awt.Color中支持声明的颜色+非声明的颜色。

答案 2 :(得分:0)

public class TestProj {

    public static void main (String[] args)throws IOException {
        List<Color> colorArray= new ArrayList<Color>();
        Scanner sc = new Scanner(System.in);
        System.out.println("\nEnter your color\n" + 
                               "BLUE, BLACK, ORANGE, WHITE, YELLOW, RED, GREEN, PINK:");

        while(sc.hasNext()){
            String str = sc.next();
            str = str.toUpperCase();
            colorArray.add(new Color(str));
        }
        System.out.println("Array size: " + colorArray.size());
    }

    static class Color {
        private String color;

        public Color(String color){
            setColor(color);
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
            System.out.println(color);
        }



    }

}

我的输出是(Ctrl-Z终止循环): 输入你的颜色 蓝色,黑色,橙色,白色,黄色,红色,绿色,粉红色:

BLUE BLACK ORANGE

BLUE

BLACK

ORANGE

数组大小:3