codice:
import java.awt.*; 
import java.awt.event.*; 

public class Finestra extends Frame implements ActionListener {
  
  Button bCrea, bEsci, bEsci2;
  Panel mainP, textP;
  TextField textf;
  
  public static void main (String argv[]) { 
    Finestra ist = new Finestra(); 
  } 
  
  public Finestra(){ 
     
    setBounds (30, 10, 300, 200); 
    setBackground (Color.lightGray); 
    setTitle("Finestra Creata");
    
    mainP = new Panel();
    bCrea = new Button ("Campo di Testo"); 
    bCrea.setBounds(40, 80, 100, 30); 
    bCrea.addActionListener(this); 
    
    bEsci = new Button ("Esci"); 
    bEsci.setBounds(150, 80, 100, 30); 
    bEsci.addActionListener(this);
    
    bEsci2 = new Button ("Torna indietro"); 
    bEsci2.setBounds(150, 80, 100, 30); 
    bEsci2.addActionListener(this);

    
    textf = new TextField(15);
    
    mainP.add(bCrea);
    mainP.add(bEsci);
    mainP.setVisible(true);
    
    textP = new Panel();
    textP.add(textf);
    textP.add(bEsci2);
    
    this.add(mainP);
    this.setVisible(true);
    
    
  } 
  
  public void actionPerformed(ActionEvent e){ 
    if (e.getActionCommand().equals(bCrea.getActionCommand())){ 
      mainP.setVisible(false);
      textP.setVisible(true);
      this.add(textP);
      this.validate();
    }
    
    if (e.getActionCommand().equals(bEsci2.getActionCommand())) {
      textP.setVisible(false);
      mainP.setVisible(true);
      this.validate();
    }
    if (e.getActionCommand().equals(bEsci.getActionCommand())) 
      System.exit(0); 
  } 
}
Un paio di commenti:

ho messo tutti gli elementi, finestra per finestra, in pannelli differenti e quindi aggiunto i pannelli al tuo frame.

il metodo validate serve perché quando si aggiungono elementi ad una finestra, non è detto che vengano ridisegnati correttamente (meglio: a volte non vengono ridisegnati affatto): validate si assicura che la finestra dell'awt venga ridisegnata per intero, quindi vengono effettivamente mostrati i pannelli aggiunti.

Saluti