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?
Trả lời
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
:
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ượngGraphics
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ảnSunGraphics2D
, được tạo trongcreateGraphics()
.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ảnSunGraphics2D
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.
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
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