Come detto andbin una volta implementata WindowListener ed i metodi, ti basta inserire in windowClosing(WindowEvent we) il codice per chiudere il frame..

Io ho fatto una cosa simile poco tempo fa, e ho semplicemente passato ad ogni classe che va ad estendere JFrame l'oggetto della classe "padre" (della classe dove avviene l'evento, come il premere un pulsante).

codice:
addWindowListener(new WindowListener() {
  public void windowClosing(WindowEvent we) {
    classeGen.setVisible(true);
    dispose();
  }

  public void windowDeactivated(WindowEvent we) {}
  public void windowActivated(WindowEvent we) {}
  public void windowDeiconified(WindowEvent we) {}
  public void windowIconified(WindowEvent we) {}
  public void windowClosed(WindowEvent we) {}
  public void windowOpened(WindowEvent we) {}
});
classeGen è un riferimento della classe che contiene un pulsante, o comunque della classe che chiama quest'altra classe e fa apparire il frame.

In sostanza dispose() è il metodo che chiude questo frame (magari ci sono modi migliori, però così mi funziona )

PS: lele mi ha anticipato :P