Convertendo uma Cadeia para Colorir em Java

No .NET você pode conseguir algo assim:

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

Existe uma maneira de fazer isso em Java sem ter que recorrer à reflection?

PS: Eu não estou pedindo formas alternativas de armazenar / carregar colors. Eu só quero saber onde é possível fazer isso ou não.

Use a reflection para acessar o membro estático da class 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 } 

Eu tentei algo assim e funcionou (pelo menos para o JavaFX)

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

Por que não criar uma class personalizada para isso? Eu fiz isso e está funcionando para mim. NB: Você terá que include essa class no seu pacote.

 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; } } 

Em algum Container eu apenas chamo assim

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

Espero que isto ajude.

Eu abri uma pequena biblioteca chamada AWT Color Factory que fornece methods para criar instâncias de java.awt.Color a partir de representações de strings.

Esses methods são a contrapartida de methods estáticos disponíveis em javafx.scene.paint.Color, como Color.web (…) ou Color.valueOf (…)

A biblioteca é extremamente leve e não depende do JavaFX.