Convertir una cadena a color en Java

En .NET puedes lograr algo como esto:

Color yellowColor = Color.FromName("yellow"); 

¿Hay alguna forma de hacerlo en Java sin tener que recurrir a la reflexión?

PD: No estoy pidiendo formas alternativas de almacenar / cargar colores. Solo quiero saber dónde es posible hacer esto o no.

Use la reflexión para acceder al miembro estático de la clase Color .

 Color color; try { Field field = Class.forName("java.awt.Color").getField("yellow"); color = (Color)field.get(null); } catch (Exception e) { color = null; // Not defined } 

Intenté algo así y funcionó (al menos para JavaFX)

 String color = "red"; Color c = Color.web(color); gc.setFill(color); gc.fillOval(10, 10, 50, 40); 

¿Por qué no hacer una clase personalizada para esto? Hice esto y está funcionando para mí. NB: Deberá incluir esta clase en su paquete.

 import java.awt.Color; /** * A class to get the Color value from a string color name */ public class MyColor { private Color color; public MyColor(){ color = Color.WHITE; } /** * Get the color from a string name * * @param col name of the color * @return White if no color is given, otherwise the Color object */ static Color getColor(String col) { switch (col.toLowerCase()) { case "black": color = Color.BLACK; break; case "blue": color = Color.BLUE; break; case "cyan": color = Color.CYAN; break; case "darkgray": color = Color.DARK_GRAY; break; case "gray": color = Color.GRAY; break; case "green": color = Color.GREEN; break; case "yellow": color = Color.YELLOW; break; case "lightgray": color = Color.LIGHT_GRAY; break; case "magneta": color = Color.MAGENTA; break; case "orange": color = Color.ORANGE; break; case "pink": color = Color.PINK; break; case "red": color = Color.RED; break; case "white": color = Color.WHITE; break; } return color; } } 

En algún Container simplemente lo llamo así

 public JPanel createStatusBar(){ JPanel statusBar = new JPanel(layoutManager); statusBar.setBackgroundColr(MyColor.color("green")); // and other properties return statusBar; 

Espero que esto ayude.

Abrí una pequeña biblioteca llamada AWT Color Factory que proporciona métodos para crear instancias java.awt.Color a partir de representaciones de cadenas.

Estos métodos son la contraparte de los métodos estáticos disponibles en javafx.scene.paint.Color, como Color.web (…) o Color.valueOf (…)

La biblioteca es extremadamente liviana y no depende de JavaFX.