2010-09-22 52 views
7

Estoy tratando de obtener los colores por nombre, y me encontré con Converting a String to Color in Java, lo que sugiere usar java.awt.getColor.¿Cómo funciona java.awt.Color.getColor (String colorName)?

Sin embargo, no sé cómo pasarlo como una cuerda. Los siguientes

System.out.println(java.awt.Color.getColor("black", Color.red)); 

imprime

java.awt.Color [r = 255, g = 0, b = 0]

es decir, se va con el color por defecto en ahí.

Lo puse en un cuadro de texto y probé mayúsculas alternativas, etc. Los documentos no son muy útiles aquí. ¿Alguien puede sugerir qué cuerdas mágicas poner?

+0

Si lee la pregunta que ha vinculado con más cuidado, verá que Color.getColor no es una opción adecuada. La versión de reflexión en esa pregunta parece mucho más apropiada. – spender

+0

OK - Lo leí varias veces, y las respuestas implican que puedo obtener colores por nombre con este método, que es mucho más conciso y natural que con la reflexión. ¿Es el caso que la respuesta de bwawok es incorrecta y no hay propiedades del sistema configuradas para el conjunto de colores predeterminado? –

+0

Sí, ese es el caso. La respuesta es incorrecta. –

Respuesta

11

La respuesta no aceptada usa Color.getColor. Este método se lee de las propiedades del sistema que pueden estar presentes o no. No deberías usar este método.

En su lugar, debe utilizar el método de reflexión upvoted para encontrar el miembro estático de la clase Color. O esto, o debería importar su propia base de datos de color que mapea nombres de cadena a valores RGB.

Color color; 
try { 
    Field field = Color.class.getField("yellow"); 
    color = (Color)field.get(null); 
} catch (Exception e) { 
    color = null; // Not defined 
} 
+0

Hola Eric, dices: "No deberías usar este método" ... ¿Pero por qué? Actualmente estoy creando un ListCellRenderer personalizado. Y quiero que use los colores predeterminados para un elemento seleccionado. Tus sugerencias sobre no usar este método me parecen extrañas. – exhuma

+0

Veo por qué estás confundido. La respuesta no aceptada en la pregunta vinculada por el PO fue eliminada. Use el método en la respuesta aceptada, por las razones que expongo en esta respuesta. –

Cuestiones relacionadas