2010-03-06 54 views
10

爲了在我的應用程序中保存圖形對象的顏色屬性,我將此Color的字符串表示保存在數據文件中。例如,對於紅色,我保存:java.awt.Color[r=255,g=0,b=0]。 如何將此字符串表示轉換爲Color,以便在加載我的數據文件後再次使用它?Java - 如何將Color.toString()轉換爲Color?

謝謝。

回答

10

使用toString()」可能因實現而有所不同「。相反,保存String.valueOf(color.getRGB())以備後續重建。

4

Color#toString

的文檔返回此Color的字符串表示。 此方法僅用於調試目的。返回的字符串的內容和格式可能因實現而異。返回的字符串可能爲空,但不能爲null

換句話說,我不會依賴於能夠將字符串反向轉換爲Color。但是,如果你堅持這樣做,你可以嘗試從字符串中解析出數字,並希望它不會有任何保證。

像這樣的事情似乎爲我工作,現在

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

其實我並不推薦這樣做,但是。 「

2

最簡單的是重新考慮你存儲字符串表示的方式。擺脫所有標籤,並將字符串「0xFF0000」存儲爲紅色。然後,您可以輕鬆地解析該字符串以獲取rgb的單個值,並將其發送給Color構造函數。

另一種方法是解析更復雜的字符串,因爲您現在將它保存爲「java.awt.Color [r = 255,g = 0,b = 0]」。

您可以在此處看到Color的構造函數: http://java.sun.com/javase/6/docs/api/(在Color中搜索「所有類」)。

彼得

3

我建議你看看java的內置序列化技術。 (我注意到Color實現了Serializable。)

16

您不妨使用getRGB()而不是toString()。您可以撥打

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

然後就可以調用

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

+1

我認爲「整合者」需要一個資本I.謝謝。 – jackdh 2014-04-26 13:20:44

3

使用的getRGB()方法來獲取顏色的INT表示,然後保存int值,並重新創建顏色使用該值。不需要解析。

2

請勿使用toString()。使用getRGB()/new Color(rgb)保存/恢復顏色的值。

0

斯蒂芬的回答幫助了我。但是,我發現我需要在語法中添加一個「true」以恢復顏色。

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

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