Comunicação entre classes, criação de painéis simples

Me ajudem por favor pode até ser besta mas estou começando agora então estou meio perdido…

Meu programa tem um painel com um botão pra adicionar novos painéis a esse painel.
e pra isso eu criei outra classe chamada CriaPaineis.
cada novo painel a ser adicionado tem 3 botões 1 checkbox e 2 textfields…

O Problema é que eu não sei fazer com que as duas classes se conversem já que os painéis só são criados quando o usuário clica no botão. e cada botão do novo painel tem que responder aos eventos da classe.

eu pensei em fazer também
public void actionPerformed(ActionEvent e) {
if (e.getSource() == botao){
pnlSequencia.add(new CriaPaineis);
e definir o colocar o action listener na classe CriaPaineis dai eu consigo criar mais que uma instancia e fazer que os botões respondam, mas não consigo excluir os painéis da tela.
pensei em levar o arraylist pra outra classe tb, mas não tenho como levar ele pra outra classe dps e colocar os objetos…

código:

// classe Tela

public class Tela extends JFrame implements ActionListener{

private JPanel pnlSequencia = null;
private JLabel lblSequencia = null;
private JButton botao = null;
private ArrayList<JPanel> lista = null;
private CriaPaineis objPainel = null;

public Tela(){ 
   initPrincipal();
}

private void initPrincipal(){

    objPainel = new CriaPaineis();
    objPainel.getBtnExcluir().addActionListener(this);
    
    lista = new ArrayList<>();
    
    lblSequencia = new JLabel("Sequência de arquivos");

    botao = new JButton("Novo Arquivo");
    botao.addActionListener(this);

    pnlSequencia = new JPanel();
    pnlSequencia.setLayout(new BoxLayout(pnlSequencia,BoxLayout.Y_AXIS));
    pnlSequencia.setPreferredSize(new Dimension(500, 625));
    pnlSequencia.setBorder(BorderFactory.createTitledBorder("Painel Sequência"));
    pnlSequencia.add(lblSequencia);
    pnlSequencia.add(botao);

}

private void novoArquivo(CriaPaineis obj){
    lista.add(obj);
    pnlSequencia.add(obj);
    pnlSequencia.validate();
}

private void exclui(CriaPaineis obj){
    lista.remove(obj);
    pnlSequencia.remove(obj);
    pnlSequencia.validate();
}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == botao){
        novoArquivo(objPainel);
    }else if (e.getSource() == objPainel.getBtnExcluir()){
        exclui(objPainel);
    }
}

}

// classe CriaPaineis

public class CriaPaineis extends JPanel{

private JButton btnExecutar, btnEditar, btnExcluir;
private JCheckBox autoExecucao;
private JTextField titulo, nomeArquivo;
private GridBagLayout layout;
private GridBagConstraints cons;

public CriaPaineis(){
    cons = new GridBagConstraints();
    layout = new GridBagLayout();
    
    this.setSize(450, 200);
    this.setLayout(layout);
    btnExecutar = new JButton("Executar");
    btnEditar = new JButton("Editar");
    btnExcluir = new JButton("Excluir");
    autoExecucao = new JCheckBox("Auto-Executar");
    titulo = new JTextField("Título"); titulo.setEditable(false);
    titulo.setSize(300, 35);
    nomeArquivo = new JTextField("nome do Arquivo"); nomeArquivo.setEditable(false);
    nomeArquivo.setSize(300, 35);
    
    cons.gridx = 0; cons.gridy = 0; cons.gridwidth = 3; cons.gridheight = 1;
    layout.setConstraints(titulo, cons);
    cons.gridy = 1;
    layout.setConstraints(nomeArquivo, cons);
    cons.gridx = 0; cons.gridy = 2; cons.gridwidth = 1;
    layout.setConstraints(autoExecucao, cons);
    cons.gridx = 1;
    layout.setConstraints(btnExecutar, cons);
    cons.gridx = 2;
    layout.setConstraints(btnEditar, cons);
    cons.gridx = 3;
    layout.setConstraints(btnExcluir, cons);
    
    add(titulo); add(nomeArquivo); add(autoExecucao);
    add(btnExecutar); add(btnEditar); add(btnExcluir);
    
}

public JButton getBtnExcluir(){
    return btnExcluir;
}

}