2012-05-11 19 views
6

Quando una richiesta di aggiornamento viene consegnata allo swing (un sistema attivato ad es. A causa di un ridimensionamento o un blocco da un'altra finestra o attivato dall'app, ad esempio mediante un metodo call to repaint()), come viene effettivamente gestita questa richiesta? Quale procedura ha luogo in quella cosa di RepaintManager?In swing-java, da dove viene l'istanza Graphics?

+6

Quanto dettagliato è necessario? Se _molto_ dettagliato, si potrebbe guardare il codice sorgente, altrimenti un buon punto di partenza sarebbe la documentazione ufficiale: http://www.oracle.com/technetwork/java/painting-140037.html – Thomas

+0

Grazie, ho letto entrambi . ma non ho capito come viene generata l'istanza * Graphics *. Ho tracciato il pre per alcuni * peer.getGraphics() * (chiamato all'interno * Component.getGraphics() *) dove ho assunto * peer * è il peer pesante (che è stato menzionato nel tuo link). ma lì ho perso la traccia. sai cosa succede in * peer.getGraphics() *? – Untitled

risposta

3

Dal tuo commento:

Sai cosa succede a peer.getGraphics()?

Dipende dall'implementazione peer.

Un'implementazione è WComponentPeer (utilizzato durante l'esecuzione su Windows), che sembra utilizzare due modi per ottenere l'oggetto Graphics:

  1. Se il componente ha un genitore di tipo Window (o è uno stesso) che a sua volta ha un buffer di back immage associato, viene restituito l'oggetto Graphics dell'immagine. Dipende dal tipo di immagine ma è più probabile un'istanza SunGraphics2D, creata in createGraphics().

  2. In caso contrario, viene richiamata un'istanza ScreenUpdateManager e viene chiamato createGraphics(...) che a sua volta restituisce una nuova istanza SunGraphics2D.

Si prega di notare che questo è solo un modo possibile e dipende molto dal sistema operativo, dal toolkit JVM e UI utilizzato.