Преобразование строки в цвет в Java - PullRequest
15 голосов
/ 18 мая 2010

В .NET вы можете достичь чего-то подобного:

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

Есть ли способ сделать это на Java, не прибегая к рефлексии?

PS: я не прошу альтернативных способов хранения / загрузки цветов. Я просто хочу знать, где это возможно или нет.

Ответы [ 4 ]

27 голосов
/ 18 мая 2010

Используйте отражение для доступа к статическому члену класса 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
}
1 голос
/ 03 июля 2018

Я открываю небольшую библиотеку с именем AWT Color Factory , которая предоставляет методы для создания экземпляров java.awt.Color из строковых представлений.

Эти методы являются аналогом статических методов, доступных в javafx.scene.paint.Color, таких как Color.web (...) или Color.valueOf (...)

Библиотека очень легкая и не зависит от JavaFX.

1 голос
/ 09 февраля 2017

Я попробовал что-то подобное, и это сработало (по крайней мере, для JavaFX)

String color = "red";
Color c = Color.web(color);
gc.setFill(color);
gc.fillOval(10, 10, 50, 40);
0 голосов
/ 08 января 2018

Почему бы не создать собственный класс для этого?Я сделал это, и это работает для меня.NB: Вы должны будете включить этот класс в свой пакет.

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;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...