2010-03-06 18 views
10

Para guardar los atributos de Color de un objeto gráfico en mi aplicación, guardé la representación de cadena de este Color en un archivo de datos. Por ejemplo, para rojo, guardo: java.awt.Color[r=255,g=0,b=0]. ¿Cómo puedo convertir esta representación de cadena en un Color para poder usarla nuevamente después de cargar mi archivo de datos?Java - ¿Cómo convertir un Color.toString() en un Color?

Gracias.

Respuesta

10

El uso de toString() "puede variar entre las implementaciones". En su lugar, guarde String.valueOf(color.getRGB()) para una reconstrucción posterior.

4

De la documentación de Color#toString

Devuelve una representación de cadena de este Color. Este método está destinado a ser utilizado solo con fines de depuración. El contenido y el formato de la cadena devuelta pueden variar entre implementaciones. La cadena devuelta puede estar vacía pero no puede ser null.

En otras palabras, no confiaría en la posibilidad de convertir de nuevo la cadena al Color. Sin embargo, si insistes en hacer esto, puedes intentar analizar los números de la cadena y esperar que funcionen sin garantías.

Algo como esto parece funcionar para mí por EMPRESA:

Scanner sc = new Scanner("java.awt.Color[r=1,g=2,b=3]"); 
    sc.useDelimiter("\\D+"); 
    Color color = new Color(sc.nextInt(), sc.nextInt(), sc.nextInt()); 

No recomiendo hacer esto realidad, sin embargo.

2

Lo más fácil es reconsiderar la forma de almacenar la representación de cadena. Deshágase de todas las etiquetas, y simplemente almacene rojo como la cadena "0xFF0000". Luego puede analizar fácilmente esa cadena para obtener el valor único para rgb y enviarlo al constructor Color.

La alternativa es analizar la cadena más complicada ya que ahora la está guardando "java.awt.Color [r = 255, g = 0, b = 0]".

Puede ver los constructores de Color aquí: http://java.sun.com/javase/6/docs/api/ (busque "todas las clases" para Color).

Peter

3

le sugiero que busque en java de tecnología integrada de serialización en su lugar. (Tengo en cuenta que Color implementa Serializable.)

16

Es posible que desee utilizar getRGB() en lugar de toString(). Puede llamar

String colorS = Integer.toString(myColor.getRGB());

A continuación, puede llamar

Color c = new Color(Integer.parseInt(colorS));

+1

Creo que "interger" necesita una capital I. Gracias. – jackdh

3

Utilice el método getRGB() para obtener la representación int del color, a continuación, se guarda el valor int y recrear el color usando ese valor. Sin análisis necesario.

2

No utilice el toString(). Use getRGB()/new Color(rgb) para guardar/restaurar el valor del color.

0

La respuesta de Stephan me ayudó con esto. Sin embargo, descubrí que necesitaba agregar un 'verdadero' a la sintaxis para restaurar el color.

// convert to string 
String colorS = Integer.toString(myColor.getRGB()); 

// restore colour from string 
Color c = new Color(Integer.parseInt(colorS), true); 
Cuestiones relacionadas