Conversion d'une chaîne en couleur en Java


Dans. NET, vous pouvez réaliser quelque chose comme ceci:

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

Existe-t-il un moyen de le faire en Java sans avoir à recourir à la réflexion?

PS: Je ne demande pas d'autres moyens de stocker/charger les couleurs. Je veux juste savoir où il est possible de le faire ou pas.

Author: devoured elysium, 2010-05-18

4 answers

Utilisez reflection pour accéder au membre statique de la classe 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
}
 26
Author: ZZ Coder, 2011-02-23 19:08:17

J'ai essayé quelque chose comme ça et cela a fonctionné (au moins pour JavaFX)

String color = "red";
Color c = Color.web(color);
gc.setFill(color);
gc.fillOval(10, 10, 50, 40);
 1
Author: randy costanza, 2017-02-09 10:04:51

Pourquoi ne pas créer une classe personnalisée pour cela? Je l'ai fait et il est travaillé pour moi. NB: Vous devrez inclure cette classe dans votre forfait.

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

Dans certains Container je l'appelle juste comme ça

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

J'espère que cela aide.

 0
Author: blongho, 2018-01-08 20:37:32

J'ai ouvert une petite bibliothèque nommée AWT Color Factory qui fournit des méthodes pour créer java.awt.Instances de couleur à partir de représentations de chaînes.

Ces méthodes sont la contrepartie des méthodes statiques disponibles dans javafx.scène.peinture.La couleur, comme la Couleur.Web(...) ou de la Couleur.valueOf(...)

La bibliothèque est extrêmement légère et ne dépend pas de JavaFX.

 0
Author: siordache, 2018-07-03 09:53:48