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?
risposta
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
:
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'oggettoGraphics
dell'immagine. Dipende dal tipo di immagine ma è più probabile un'istanzaSunGraphics2D
, creata increateGraphics()
.In caso contrario, viene richiamata un'istanza
ScreenUpdateManager
e viene chiamatocreateGraphics(...)
che a sua volta restituisce una nuova istanzaSunGraphics2D
.
Si prega di notare che questo è solo un modo possibile e dipende molto dal sistema operativo, dal toolkit JVM e UI utilizzato.
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
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