2012-05-11 21 views
6

當更新請求傳遞給swing時(例如由於調整大小或由另一個窗口阻止觸發系統,或由例如調用repaint()方法引發的應用程序觸發),該請求如何實際處理?在RepaintManager中發生什麼過程?在swing-java中,Graphics實例從哪裏來?

+6

您需要的詳細程度如何?如果_very_詳細,你可以看看源代碼,否則一個很好的開始將是官方文檔:http://www.oracle.com/technetwork/java/painting-140037.html – Thomas

+0

謝謝,我讀了兩個。但不明白* Graphics *實例是如何生成的。我追溯到一些* peer.getGraphics()*(在* Component.getGraphics()*)中調用,我假設* peer *是重量級的對等體(在您的鏈接中提到過)。但是我失去了賽道。你知道在* peer.getGraphics()*中發生了什麼嗎? – Untitled

回答

3

從您的評論:

你知道在peer.getGraphics會發生什麼()?

這取決於使用哪個對等實現。

一個實現方式是WComponentPeer,這似乎用兩種方式獲取Graphics對象(在Windows上運行時使用):

  1. 如果組件有Window類型的父(或一個本身)後者依次具有關聯的後臺緩衝區immage,該圖像的Graphics對象被返回。這取決於圖像的類型,但最像like實例,在createGraphics()中創建。

  2. 否則,將調用ScreenUpdateManager實例,並調用createGraphics(...),然後返回一個新的SunGraphics2D實例。

請注意,這只是一種可能的方式,它高度依賴於操作系統,所使用的JVM和UI工具包。