Java - Как преобразовать Color.toString() в цвет?

Чтобы сохранить атрибуты цвета графического объекта в моем приложении, я сохранил строковое представление этого цвета в файле данных. Например, для красного я сохраняю: java.awt.Color[r=255,g=0,b=0]. Как преобразовать это строковое представление в цвет, чтобы я мог использовать его снова после загрузки моего файла данных?

Спасибо.

Ответ 1

Использование toString() "может различаться между реализациями." Вместо этого сохраните String.valueOf(color.getRGB()) для последующей реконструкции.

Ответ 2

Вы можете использовать getRGB() вместо toString(). Вы можете позвонить

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

Затем вы можете вызвать

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

Ответ 3

Из документации Color#toString

Возвращает строковое представление этого Color. Этот метод предназначен для использования только в целях отладки. Содержимое и формат возвращаемой строки могут различаться между реализациями. Возвращенная строка может быть пустой, но не может быть null.

Другими словами, я не буду полагаться на возможность обратного преобразования строки в Color. Однако, если вы настаиваете на этом, вы можете попытаться разобрать цифры из строки и надеяться, что она будет работать без каких-либо гарантий.

Что-то вроде этого, похоже, работает для ME для СЕЙЧАС:

    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());

Я вообще не рекомендую это делать.

Ответ 4

Я предлагаю вам вместо этого использовать встроенную сериализацию Java. (Я отмечаю, что Color реализует Serializable.)

Ответ 5

Используйте метод getRGB(), чтобы получить внутреннее представление Color, затем сохраните значение int и заново создайте Color, используя это значение. Не требуется синтаксический анализ.

Ответ 6

Самое простое - переосмыслить способ хранения строкового представления. Избавьтесь от всей маркировки и просто сохраните красный цвет как строку "0xFF0000". Затем вы можете легко разобрать эту строку, чтобы получить одно значение для rgb, и отправить его в конструктор цветов.

Альтернативой является синтаксический анализ более сложной строки, поскольку вы теперь сохраняете ее "java.awt.Color [r = 255, g = 0, b = 0]".

Здесь вы можете увидеть конструкторы для Color:  http://java.sun.com/javase/6/docs/api/ (поиск "всех классов" для цвета).

Петр

Ответ 7

Не используйте toString(). Используйте getRGB()/new Color(rgb) для сохранения/восстановления значения цвета.

Ответ 8

Ответ Стефана помог мне в этом. Тем не менее, я обнаружил, что мне нужно добавить "true" в синтаксис, чтобы восстановить цвет.

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

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