2010-05-18 5 views
15

Dans .NET, vous pouvez obtenir quelque chose comme ceci:Conversion d'une chaîne de couleur en Java

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

Est-il possible 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 non.

Répondre

25

Utilisez la réflexion 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 
} 
+2

C'est une réflexion et c'est la seule solution à laquelle je peux penser. Toute autre manière nécessiterait de créer une carte de couleurs. –

+0

C'est une réflexion mais c'est la bienvenue. Cela semble être la seule façon de le faire ... Je me demande pourquoi tout en Java doit être si compliqué. –

+0

@devoured elysium: Après avoir utilisé le ruby ​​pendant un certain temps, je n'aime pas java parce que vous devez réinventer la roue plusieurs fois. Vous pouvez utiliser groovy, il vous permet d'accéder aux champs par le nom. –

1

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

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

Oui, c'est pour javafx.scene.paint.Color. – Line

0

Pourquoi ne pas faire une classe personnalisée pour cela? Je l'ai fait et ça marche pour moi. NB: Vous devrez inclure cette classe dans votre package.

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 viens d'appeler comme ça

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

Hope this helps.