2012-05-11 34 views
6

Khi yêu cầu cập nhật được gửi đến swing (hệ thống được kích hoạt, ví dụ: do thay đổi kích thước hoặc chặn bởi cửa sổ khác hoặc kích hoạt ứng dụng, ví dụ: gọi phương thức repaint()), yêu cầu này thực sự được xử lý như thế nào? Thủ tục nào diễn ra trong điều RepaintManager đó?Trong swing-java, bản sao của đồ họa đến từ đâu?

+6

Bạn cần chi tiết đến mức nào? Nếu _very_ chi tiết, bạn có thể xem mã nguồn, nếu không một nơi tốt để bắt đầu sẽ là tài liệu chính thức: http://www.oracle.com/technetwork/java/painting-140037.html – Thomas

+0

Cảm ơn bạn, tôi đã đọc cả hai . nhưng không hiểu trường hợp * Graphics * được tạo ra như thế nào. Tôi đã truy tìm trước một số * peer.getGraphics() * (được gọi bên trong * Component.getGraphics() *) trong đó tôi giả sử * peer * là một peer nặng (được đề cập trong liên kết của bạn). nhưng ở đó tôi đã mất dấu vết. bạn có biết điều gì xảy ra trong * peer.getGraphics() *? – Untitled

Trả lời

3

Từ nhận xét của bạn:

Bạn có biết điều gì xảy ra trong peer.getGraphics()?

Điều đó phụ thuộc vào việc triển khai thực hiện ngang hàng nào được sử dụng.

Một thực hiện là WComponentPeer (sử dụng khi chạy trên Windows), mà dường như sử dụng hai cách để nhận được đối tượng Graphics:

  1. Nếu các thành phần có cha mẹ kiểu Window (hoặc là một trong chính nó) mà lần lượt có một bộ đệm trở lại chưa kết hợp, đối tượng Graphics của hình ảnh đó được trả về. Điều này tùy thuộc vào loại hình ảnh nhưng hầu hết giống với một phiên bản SunGraphics2D, được tạo trong createGraphics().

  2. Nếu không, ScreenUpdateManager thể hiện được truy xuất và createGraphics(...) được gọi trên đó lần lượt trả về phiên bản SunGraphics2D mới.

Xin lưu ý rằng đây chỉ là một cách có thể và nó phụ thuộc rất nhiều vào hệ điều hành, bộ công cụ JVM và giao diện người dùng được sử dụng.