Se il tuo scopo è quello di creare una finestra di dialogo (almeno così mi pare di capire), allora io utilizzo questa forma:

1) Creo una classe che estende JDialog (es MiaDialog)
2) Prevedo un metodo che mi indica se la chiusura della dialog deve essere interpretata come conferma (clic su OK) o come Annulla (pressione su Annulla o chiusura)
3) Se la chiusura è interpretata come conferma, allora ho a disposizione una serie di metodi per recuperare i valori inseriti nella Dialog.

Esempio:
codice:
class MiaDialog extends JDialog {
   ... // Pulsanti ed oggetti
   private boolean valido;   // Impostata per default a false

   public MiaDialog(Frame parent) {
      super(parent, titolo);
      ...
      setModal( true );
      setVisible( true);
      setDefaultCloseOperation(HIDE_ON_CLOSE);
   }

   public void actionPerformed(ActionEvent ae) {
      if ( premuto_pulsante_conferma ) {
         ... // Controlli del caso: validità dati inseriti...
         if ( è_tutto_a_posto ) {
            valido = true;
         }
      } else {
         valido = false;   // per sicurezza
      }
      setVisible( false );
   }

   public boolean isValido() { return valido; }
   ...  // Elenco metodi "get" per recupero valori inseriti
   public void chiudi() { dispose(); }
}

...

MiaDialog md = new MiaDialog( this );
if ( md.isValido() ) {
   ...   // Recupero i dati
}
md.chiudi();
Ciao.