Le due soluzioni sono di pari grado di difficoltà... ovviamente la prima soluzione (2 pulsanti, "Avanti" e "Indietro") è da preferirsi, perchè ti dà più flessibilità se il numero di immagini cambia.

Vediamo, quindi, di fare un po' di luce su come impostare la cosa:

1) Creare un array bidimensionale di String dove mettere i nomi di tutte le immagini che si intende visualizzare e le relative didascalie;

2) Creare i due pulsanti "Avanti" e "Indietro" e far sì che alla pressione di uno di questi due pulsanti venga incrementato o decrementato un determinato indice (facendo gli opportuni controlli, per evitare lo sconfinamento dell'array);

3) Visualizzare quindi l'immagine rappresentata dal valore contenuto nell'array di prima alla posizione specificata dall'indice.

Un po' di codice esemplificativo:
codice:
// Creiamo l'array con i nomi delle immagini e le didascalie:
private String [][] immagini = { {"immagine1.gif", "didascalia immagine 1"},
                                 {"immagine2.gif", "didascalia immagine 2"},
                                 ...
                               };

// Abbiamo bisogno di un indice globale:
private int indice;
...
// Creiamo i due pulsanti
JButton cmdAvanti = new JButton("Avanti");
JButton cmdIndietro = new JButton("Indietro");

// Creiamo la didascalia
JLabel lblDidascalia = new JLabel();

// Diciamo ai pulsanti cosa fare (questa classe fa da ActionListener)
cmdAvanti.addActionListener(this);
cmdIndietro.addActionListener(this);
...
public void actionPerformed(ActionEvent ae) {
   JButton comando = (JButton) ae.getSource();
   if (comando.equals(cmdAvanti)) {
      // E' stato premuto il pulsante avanti
      visuailzzaProssimaFoto();
   } else {
      // E' stato premuto il pulsante indietro
      visualizzaFotoPrecedente();
   }
}

private void visualizzaProssimaFoto() {
   // Controlliamo che non sia già visualizzata l'ultima foto
   if (indice < (NUMERO_FOTO - 1)) {
      indice++;
      disegnaFoto(indice);
   }
}

private void visualizzaFotoPrecedente() {
   // Controlliamo che non sia visualizzata la prima foto
   if (indice > 0) {
      indice--;
      disegnaForo(indice);
   }
}

private void disegnaFoto(int indice) {
   // Qui ci occupiamo di disegnare a video la foto indicata dall'indice
   Image img = Toolkit.getFedaultToolKit().createImage(immagini[i][0]);
   ... // la visualizziamo

   // Cambiamo la didascalia
   lblDidascalia.setText(immagini[i][1]);
}
Questo dovrebbe essere, a grandi linee, il corpo della classe di cui hai bisogno. Ho tralasciato i dettagli della visualizzazione delle immagini, se ti servono delucidazioni chiedi pure.


Ciao.