
Originariamente inviata da
roquentin
Mi potresti spiegare che perametri devo passargli qui:
codice:
public void paintIcon (final Component c, Graphics g, int x, int y) {
...
???
Ma allora non hai ancora compreso cosa è un Icon e perché ImageProxy implements Icon .... 
ImageProxy implementa Icon, ovvero è una "icona" come intesa da Swing e da tutti i componenti che sono in grado di visualizzare icone (JLabel, JButton e altri). Il suo metodo:
public void paintIcon(final Component c, Graphics g, int x, int y)
NON sei tu che lo devi invocare! È il framework che lo invoca.
Tu dovresti usare ImageProxy creandone una istanza e assegnandola ad un componente che visualizza una icona. Riprendendo dal tuo codice:
codice:
String mapUrlFormat = ("https://maps.googleapis.com/maps/api/staticmap?center=.......");
URL mapUrl = new URL(mapUrlFormat);
Icon img = new ImageProxy(mapUrl); // <---- tu crei un ImageProxy !!!
mapHolder.setIcon(img);
Finché la immagine da mapUrl non è completamente caricata, il paintIcon di ImageProxy passa nel else
codice:
} else {
g.drawString("Loading CD cover, please wait...", x+300, y+190);
if (!retrieving) {
e disegna un testo (tu dovrai disegnare una immagine ... quindi il codice un po' lo devi rimaneggiare, è ovvio) e solo 1 volta fa partire un thread che carica la immagine finale. Quando essa sarà finalmente caricata, allora il paintIcon di ImageProxy passa nel primo ramo del if:
codice:
if (imageIcon != null) {
imageIcon.paintIcon(c, g, x, y); // <--- disegna la immagine caricata
In pratica quando la immagine finale è caricata, il paintIcon di ImageProxy fa semplicemente e solo più da "passacarte" verso il paintIcon della "vera" immagine. Prima invece si attivava lui per disegnare "qualcosa" come segnaposto.
Ti è chiaro ora? Perché se non ti è chiaro te lo dovrò rispiegare pure domani a pasquetta ..