2010-05-18 20 views
15

En .NET se puede lograr algo como esto:convertir una cadena de color en Java

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

¿Hay una manera de hacer esto en Java sin tener que recurrir a la reflexión?

PD: No estoy pidiendo formas alternativas de almacenar/cargar colores. Solo quiero saber dónde es posible hacer esto o no.

Respuesta

25

Utilice la reflexión para acceder al miembro estático de la clase 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

Es reflejo y es la única solución que se me ocurre. De otra manera, sería necesario crear un mapa de colores. –

+0

Es reflejo, pero eso es bienvenido. Parece ser la única manera de hacerlo ... Me pregunto por qué todo en Java tiene que ser tan complicado ... –

+0

@devoured elysium: Después de usar ruby ​​por un tiempo, no me gusta Java porque tienes que reinventar la rueda muchas veces Puedes usar groovy, te permite acceder a los campos por el nombre. –

1

he intentado algo como esto y funcionó (al menos para JavaFX)

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

Sí, es para javafx.scene.paint.Color. – Line

0

por qué no hacer una clase personalizada para esto? Hice esto y está funcionando para mí. NB: Deberá incluir esta clase en su paquete.

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

En algunos Container yo sólo lo llamo como esto

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

Espero que esto ayude.

Cuestiones relacionadas