2010-03-06 56 views
10

Để lưu các thuộc tính Màu của một đối tượng đồ họa trong ứng dụng của tôi, tôi đã lưu biểu diễn chuỗi của Màu này trong một tệp dữ liệu. Ví dụ: đối với màu đỏ tôi lưu: java.awt.Color[r=255,g=0,b=0]. Làm cách nào để chuyển đổi chuỗi ký tự này thành màu để tôi có thể sử dụng lại sau khi tải tệp dữ liệu?Java - Làm thế nào để chuyển đổi một Color.toString() thành một màu?

Cảm ơn bạn.

Trả lời

10

Sử dụng toString() "có thể khác nhau giữa các lần triển khai". Thay vào đó hãy lưu String.valueOf(color.getRGB()) để tái thiết sau này.

4

Từ các tài liệu của Color#toString

Trả về một chuỗi đại diện của Color này. Phương pháp này chỉ được sử dụng cho mục đích gỡ lỗi. Nội dung và định dạng của chuỗi được trả về có thể khác nhau giữa các lần triển khai. Chuỗi được trả về có thể trống nhưng không thể là null.

Nói cách khác, tôi sẽ không dựa vào việc có thể chuyển đổi ngược chuỗi thành Color. Tuy nhiên, nếu bạn khăng khăng làm điều này, bạn có thể thử phân tích các số ra khỏi chuỗi và hy vọng rằng nó sẽ hoạt động mà không có sự bảo đảm nào.

Something như này dường như làm việc cho tôi bây giờ:

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

tôi không khuyên bạn nên thực sự làm điều này, tuy nhiên.

2

Điều dễ nhất là suy nghĩ lại cách bạn lưu trữ biểu diễn chuỗi. Loại bỏ tất cả ghi nhãn và chỉ lưu trữ màu đỏ làm chuỗi "0xFF0000". Sau đó, bạn có thể dễ dàng phân tích cú pháp chuỗi đó để lấy giá trị duy nhất cho rgb và gửi nó tới hàm tạo Màu.

Cách khác là phân tích chuỗi phức tạp hơn vì bạn hiện đang lưu chuỗi "java.awt.Color [r = 255, g = 0, b = 0]".

Bạn có thể xem các hàm tạo cho Màu ở đây: http://java.sun.com/javase/6/docs/api/ (tìm kiếm "tất cả các lớp" cho Màu).

Peter

3

Tôi đề nghị bạn nên xem xét kỹ thuật tuần tự được tích hợp sẵn của java. (Tôi lưu ý rằng Color thực hiện Serializable.)

16

Bạn có thể sử dụng getRGB() thay vì toString(). Bạn có thể gọi

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

Sau đó, bạn có thể gọi

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

+1

Tôi nghĩ rằng nhu cầu "can thiệp" là vốn I. Cảm ơn. – jackdh

3

Sử dụng phương pháp getRGB() để có được những đại diện int của màu, sau đó bạn lưu các giá trị int và tái tạo màu bằng cách sử dụng giá trị đó. Không cần phân tích cú pháp.

2

Không sử dụng toString(). Sử dụng getRGB()/new Color(rgb) để lưu/khôi phục giá trị của màu.

0

Câu trả lời của Stephan đã giúp tôi với điều này. Tuy nhiên, tôi thấy rằng tôi cần phải thêm một 'true' vào cú pháp để khôi phục màu.

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

// restore colour from string 
Color c = new Color(Integer.parseInt(colorS), true); 
Các vấn đề liên quan