Originariamente inviato da palopo
codice:
           visualizzaImmagine = new ImagePanel(file);
           visualizzaImmagine.repaint();
Questo non è sbagliato di per sé .... solo che hai appena istanziato un nuovo oggetto ImagePanel e dovresti a) aggiungerlo nel tuo "contenitore" e b) visto che non hai usato un layout manager, posizionarlo/dimensionarlo con setBounds().
Insomma .... solo istanziarlo e invocarci sopra repaint() .... non vuol dire nulla, finché non è "dentro" qualcosa e posizionato/dimensionato!!

Ma è tuttavia solo uno dei possibili approcci ... che tra l'altro è pure più critico. Ora domandati ... perché devi per forza istanziare ogni volta un nuovo ImagePanel?
Appunto ... potresti riusare sempre una sola istanza mettendo in ImagePanel un bel metodo

public void setImageFile(File file)

che si occuperebbe di: a) caricare la immagine, b) aggiornare il suo "stato" interno (variabili di istanza) e c) invocare repaint() per aggiornare a video la immagine.