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

21

在.NET中,您可以实现类似于以下内容:

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

在Java中有没有不用反射的方法来做到这一点?

顺便说一句:我不是在询问其他存储/加载颜色的方式,我只想知道是否有可能做到这一点。

4个回答

33

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

2
这是反射,也是我能想到的唯一解决方案。其他任何方法都需要创建颜色映射表。 - Denis Tulskiy
1
这是反射,但欢迎使用。似乎这是唯一的方法...我想知道为什么Java中的所有东西都要这么复杂.. - devoured elysium
@devoured elysium:使用 Ruby 一段时间后,我不喜欢 Java,因为你必须多次重新发明轮子。你可以使用 Groovy,它允许你通过名称访问字段。 - Denis Tulskiy

3
我尝试了类似于这样的方法,它起作用了(至少对于JavaFX来说)。
String color = "red";
Color c = Color.web(color);
gc.setFill(color);
gc.fillOval(10, 10, 50, 40);

是的,它是用于javafx.scene.paint.Color的。 - Line

1
为什么不为此创建一个自定义类?我这样做了,对我有用。 注意:您必须将此类包含在您的程序包中。
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;
    }
}

在某些容器中,我只是这样调用它:
public JPanel createStatusBar(){
    JPanel statusBar = new JPanel(layoutManager);
    statusBar.setBackgroundColr(MyColor.color("green"));
    // and other properties
    return statusBar;

希望这有所帮助。

你不会因为聪明而得分,但是你因为不懒惰而能获得很多分数;2。 - Cedar

1

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接