在Java中将字符串转换为颜色

在.NET中,您可以实现以下目标:

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

有没有办法在Java中执行此操作而不必诉诸于reflection?

PS:我不是要求其他方式来存储/加载颜色。 我只是想知道在哪里可以做到这一点。

使用reflection来访问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 } 

我试过这样的东西,它起作用了(至少对于JavaFX而言)

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

为什么不为此制作一个自定义类? 我这样做了,它对我有用。 注意:您必须在您的包中包含此类。

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

在某些Container我只是这样称呼它

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

希望这可以帮助。

我开源了一个名为AWT Color Factory的小库,它提供了从字符串表示创建java.awt.Color实例的方法。

这些方法与javafx.scene.paint.Color中可用的静态方法相对应,例如Color.web(…)或Color.valueOf(…)

该库非常轻量级,不依赖于JavaFX。