【问题标题】:Converting a String to Color in Java在 Java 中将字符串转换为颜色
【发布时间】:2011-02-20 16:40:27
【问题描述】:

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

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

有没有办法在 Java 中做到这一点而不必求助于反射?

PS:我不是在要求存储/加载颜色的替代方法。我只是想知道在哪里可以做到这一点。

【问题讨论】:

    标签: java colors


    【解决方案1】:

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

    【讨论】:

    • 这是反思,也是我能想到的唯一解决方案。任何其他方式都需要创建颜色图。
    • 这是一种反思,但这是受欢迎的。这似乎是唯一的方法......我想知道为什么Java中的一切都必须如此复杂......
    • @devoured elysium:用了一段时间的ruby,我不喜欢java了,因为你要重复造轮子很多次。您可以使用 groovy,它允许您按名称访问字段。
    【解决方案2】:

    我尝试了类似的方法并且它有效(至少对于 JavaFX)

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

    【讨论】:

    • 是的,它用于 javafx.scene.paint.Color。
    【解决方案3】:

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

    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;
    

    希望这会有所帮助。

    【讨论】:

    • 聪明不加分,不懒得加分; 2
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-03-24
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 2017-04-07
      相关资源
      最近更新 更多