Ciao, io ho fatto qualcosa di simile anche se non è esattamente quello che cerchi forse.

Spesso ho più classi e ho la necessità di chiudere un frame e aprirne un altro o nascondere/mostrare/modificare delle componenti gestite da un'altra classe: per questo di solito definisco il JFrame come variabile statica di una classe, e se ad esempio premo un pulsante (gestito da un'altra classe) faccio qualcosa del tipo:

codice:
Container finestra=NomeClasse.frame.getContentPane();
((JLabel)((JPanel)finestra.getComponent(0)).getComponent(0)).setText("Seleziona la partita da rivedere (Totale partite: "+n+")");
Con getComponent puoi richiamare i componenti interni a qualsiasi livello, ma se vuoi farne in successione devi fare il cast del Component a quello che ti aspetti di trovare (ovviamente rischi che si blocchi in esecuzione se non gestisci bene il tutto).

In questo esempio cambiavo il testo di una label , ho anche dovuto mostrare e nascondere bottoni in questo modo:
codice:
if(premuto.equals("Elimina")) // premuto è la getActionCommand() del bottone 
{
        // in questo caso ho definito statico il pannello pS in un'altra classe
    for(int i=13;i<16;i++)((Box)(Classe.pS.getComponent(0))).getComponent(i).setVisible(false);
    for(int i=0;i<3;i++)((Box)(Classe.pS.getComponent(1))).getComponent(i).setVisible(false);
    for(int i=3;i<8;i++)((Box)(Classe.pS.getComponent(1))).getComponent(i).setVisible(true);        
}
Non ho mai però nascosto/mostrato pannelli dopo averli creati, anche perchè dovresti ridefinire la posizione degli altri pannelli se vuoi controllare il tutto...
Altri metodi per recuperare Componenti sono ad esempio getComponents() che restituisce un array dei componenti di un Container,oppure getParent() che restituisce il Container di un componente qualsiasi.

Ps: Uso Swing da pochi mesi e molte delle cose scritte potrebbero fare rabbrividire qualche nostro utente più esperto