Chamar JButon de um JFrame para outro

Olá Bom dia!
Sou iniciante nessa área, e estou com um pequeno probleminha, se poderes me ajudar agradeço…
Tenho dois Frames um é principal § e o outro (B) eu chamo através de um botão.
na tela principal tenho dois botões cadastrar e acessar, quando eu executo a tela principal aparece o botão cadastrar não aparece (isso é intencional) ficando visível apenas o botão acessar, quando clicar no botão acessar ele chama o frame (B) que por fim tem dois botões confirmar e cancelar, ao clicar no botão confirmar ele retorna ao frame principal §, dessa vez com o botão cadastrar visível, mas não tenho ideia de como posso usar o botão cadastrar do frame § no frame (B).

Seria melhor usar o JDialog modal no (B), no botão ficaria:

// isto tem que estar no (P) no botão acessar
dialogB.setModal(true);
dialogB.setVisible(true);
if (dialogB.foiPrecionadoBotaoConfirma()) {
    cadastrar.setVisible(true);
}

// no dialogB no confirmar
this.precionouConfirmar = true;
this.setVisible(false); // ou dispose(), prefiro o setVisible pois depois não será necessário usar o new para abrir novamente

// método no dialogB
boolean precionouConfirmar  = false;
public boolean foiPrecionadoBotaoConfirma() {
  return precionouConfirmar;
}

mas se quiser continuar usando o (B) como JFrame, a opção mais simples (não considero correto), seria fazendo uma classe assim:

class JFrames {
  public static JFrame P;
  public static JFrame B;
}

// no botão acessa
JFrames.P = this; // vai depender de como vc fez, pode ser JFrame.this ou  NOME_DA_CLASSE.this
JFrames.B = B;
B.setVisible(true);

// no botão confirma
JFrames.P.exibirBotaoCadastrar(); // equivalente a JFrames.P.cadastrar.setVisible(true);

Acho q n entendestes minha duvida ou talvez eu tenha sido evasivo, vou exemplificar
frame §
botão cadastrar qdo executo o programa ele vem invisível pois usei [cadastrar.setVisible(false)] no meu construtor.
botão acessar fica visível, pois quando clico nele o frame B aparece (ele já esta implementado).
até ai tudo ok
frame (B)
botão confirmar, quero implementar esse botão, para qdo eu clicar nele o frame § apareça com o botão cadastrar visivel. (esse ja ta implementado para que a tela P apareça) .

e acredito que pra mim fazer isso tenho que criar um metodo em uma classes para que eu tenha permissão para usar a variavel do botão declarada no frame P dentro do frame B e isso eu n estou conseguindo fazer…

Eu entendi, o que a maioria faz é usar o padrão Observer, mas talvez vc não conheça, então vou dar um exemplo diferente:

classe FrameP extends JFrame() {
  FrameB frameB;
  JButton cadastrar;
  JButton acessar;

  // construtor
  public FrameP() {
    acessar.addActionListener() {
      frameB.setBotaoCadastrar(cadastrar); // entrega o botão cadastrar para que o FrameB possa exibir depois
      frameB.setVisible(true);
    }
  }
}

classe FrameB extends JFrame() {
  JButton cadastrarDoFrameP;
  JButton confirmar;

  // construtor
  public FrameB() {
    confirmar.addActionListener() {
      cadastrarDoFrameP.setVisible(true); // exibe o botão
      // setVisible(false); // fecha o frameB, ou use frameB.dispose(); não sei se precisa fechar
    }
  }
  // atualiza o botão que o confirmar deva exibir
  void setBotaoCadastrar(botao) {
    this.cadastrarDoFrameP = botão;
  }
}

Atenção, isso é um esboço.

ok! obrigado entendi vou tentar fazer aqui qualquer coisa volto com minhas duvidas

Vou enviar o código completo como estou fazendo no netbeans vai ficar um pouco longo…

Essa é a classe Principal q quando clicar no botão Login vai abrir a tela do frame B

public class Principal extends javax.swing.JFrame {

/**
 * Creates new form Principal
 */
public Principal() {
    initComponents();
    JBCadastrar.setVisible(false);
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    JBCadastrar = new javax.swing.JButton();
    JBAcessar = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    JBCadastrar.setText("Cadastrar");

    JBAcessar.setText("Acessar");
    JBAcessar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            JBAcessarActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(147, 147, 147)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                .addComponent(JBCadastrar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(JBAcessar, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
            .addContainerGap(172, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(106, 106, 106)
            .addComponent(JBCadastrar)
            .addGap(38, 38, 38)
            .addComponent(JBAcessar)
            .addContainerGap(110, Short.MAX_VALUE))
    );

    setSize(new java.awt.Dimension(416, 338));
    setLocationRelativeTo(null);
}// </editor-fold>                        

private void JBAcessarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    String args [] = new String [1];
    FrameB1.main(args);
    
}                                         

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(Principal.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new Principal().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton JBAcessar;
private javax.swing.JButton JBCadastrar;
// End of variables declaration                   

}

Essa outra é o Frame
public class FrameB1 extends javax.swing.JFrame {

public class FrameB1 extends javax.swing.JFrame {

/**
 * Creates new form FrameB1
 */
public FrameB1() {
    initComponents();
}

/**
 * This method is called from within the constructor to initialize the form.
 * WARNING: Do NOT modify this code. The content of this method is always
 * regenerated by the Form Editor.
 */
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">                          
private void initComponents() {

    JBConfirmar = new javax.swing.JButton();
    JBCancelar = new javax.swing.JButton();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    JBConfirmar.setText("Confirmar");
    JBConfirmar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            JBConfirmarActionPerformed(evt);
        }
    });

    JBCancelar.setText("Cancelar");
    JBCancelar.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            JBCancelarActionPerformed(evt);
        }
    });

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(70, 70, 70)
            .addComponent(JBConfirmar)
            .addGap(76, 76, 76)
            .addComponent(JBCancelar)
            .addContainerGap(100, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(124, 124, 124)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(JBConfirmar)
                .addComponent(JBCancelar))
            .addContainerGap(153, Short.MAX_VALUE))
    );

    setSize(new java.awt.Dimension(416, 338));
    setLocationRelativeTo(null);
}// </editor-fold>                        

private void JBConfirmarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    String args [] = new String [1];
    Principal.main(args);
    dispose();
}                                           

private void JBCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    dispose();
}                                          

/**
 * @param args the command line arguments
 */
public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
            if ("Nimbus".equals(info.getName())) {
                javax.swing.UIManager.setLookAndFeel(info.getClassName());
                break;
            }
        }
    } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(FrameB1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(FrameB1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(FrameB1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(FrameB1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>

    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new FrameB1().setVisible(true);
        }
    });
}

// Variables declaration - do not modify                     
private javax.swing.JButton JBCancelar;
private javax.swing.JButton JBConfirmar;
// End of variables declaration                   

}

Então, observa q no primeiro frame eu deixei o botão cadastrar invisivel
e quando eu clicar em acessar vai chamar a tela do frameB1
e quando eu acionar o botão confirmar vai fechar a janela do frameB1 chamando de volta o frame principal ja com o botão cadastrar visível. mas eu não estou conseguindo fazer isso…

Desculpe está te alugando mas eu queria aprender essa parte…