Dal codice che hai messo si evince che hai una classe ImagePanel, che chiede nel costruttore un immagine (o una stringa) che poi viene disegnata dalla sub apposita, se vuoi avere delle immagini diverse per ogni panel devi istanziare più classi di tipo ImagePanel e passargli come argomento nel costruttore l'immagine per quel pannello, tipo:
public ImagePanel panel;
public ImagePanel panel2;
public ImagePanel panel3;
public ImagePanel panel4;
panel = new ImagePanel("stringaimmagine1");
panel2 = new ImagePanel("stringaimmagine2");
panel3 = new ImagePanel("stringaimmagine3");
panel4 = new ImagePanel("stringaimmagine4");
//questi componenti li metti nel jframe
frame.getContentPane().add(panel, BorderLayout.CENTER);
frame.getContentPane().add(panel2, BorderLayout.CENTER);
frame.getContentPane().add(panel3, BorderLayout.CENTER);
frame.getContentPane().add(panel4, BorderLayout.CENTER);
Però come hai scritto la classe tu sembra non avere molto senso, infatti erediti i campi di JFrame ma non li utilizzi, infatti dovresti mettere un costruttore e fare una cosa del genere:
public class Finestra extends JFrame
{
public Finestra(String TestoTitolo)
{
super(TestoTitolo);
this.setSize(100, 100);
//accedi ai metodi tramite this
}
}
Se controlli nelle varie discussioni avevo messo del codice su come fare a mettere un immagine in un JPanel. Ah il DoubleBuffer serve quando disegni per non dare problemi, in poche parole si tratta di disegnare in un pezzo di memoria invece che subito sul JPanel, in questo modo appena hai finito di disegnare l'immagine viene aggiornata, se venisse aggiornata mentre stai disegnando vedresti un pezzo di JPanel con la nuova immagine, mentre un'altro pezzo resterebbe con quella vecchia, e questi sarebbero cazzi, se non sei convinto oppure hai dei dubbi chiedi.