Tenho dois Frames, um que leva a janela a outro, só que eu gostaria que a primeira janela fechasse, usei o Dispose() e não deu certo . O que usar neste caso?

 private void botaoEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                            

        String auxAdministrador = campoAdministrador.getText();

        if (campoEmpresa.getText().equals("“IFTM Patrocínio") && campoSenha.getPassword().equals("xpto123")
                || campoAdministrador.getText().equals("<<administradorXXX>>")) {

            FormularioCadastro formularioCadastro = new FormularioCadastro();
            formularioCadastro.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
            formularioCadastro.setVisible(true);

            JOptionPane.showMessageDialog(null, "\nLogin efetuado com sucesso! Bem Vindo!" + "\nAdministrador:" + auxAdministrador);

        } else {
            JOptionPane.showMessageDialog(null, "Erro ao efetuar Login! Tente novamente.");
        }

Não tem nenhuma chamada ao dispose() no seu código.

Você pode usar o dispose() ou o setVisible(false).

Exemplo:

private void botaoEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    String auxAdministrador = campoAdministrador.getText();
    if (campoEmpresa.getText().equals("“IFTM Patrocínio") && campoSenha.getPassword().equals("xpto123")
        || campoAdministrador.getText().equals("<<administradorXXX>>")) {

        FormularioCadastro formularioCadastro = new FormularioCadastro();
        formularioCadastro.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

        setVisible(false); // fecha esta janela
        formularioCadastro.setVisible(true); // abre a outra janela

        // precisa realmente mostrar mensagem que o login deu certo?
        // já não é óbvio que o login deu certo pelo simples fato de abrir a tela de cadastro?
        JOptionPane.showMessageDialog(null, "\nLogin efetuado com sucesso! Bem Vindo!" + "\nAdministrador:" + auxAdministrador);
    } else {
        JOptionPane.showMessageDialog(null, "Erro ao efetuar Login! Tente novamente.");
    }
}
1 curtida

não entendi o setVisible(false) sozinho.

Em que classe está declarado esse método botaoEntrarActionPerformed ?

Pergunto pois é no objeto dessa própria classe, ou seja no this dela, que o setVisible está sendo chamado.

Talvez seja interessante você estudar algum material sobre programação orientada a objetos, tenho a impressão de que você está pulando etapas no seu aprendizado, isso não é legal.

1 curtida

Ele tá na classe Login, eu não aprendi muito bem mesmo não POO. Fiz sem instanciar agora, só falta fechar a janela.

    private void botaoEntrarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        
        String auxAdministrador = campoAdministrador.getText();
        if (campoEmpresa.getText().equals("“IFTM Patrocínio") && campoSenha.getPassword().equals("xpto123")
                || campoAdministrador.getText().equals("<<administradorXXX>>")) {
            
            JOptionPane.showMessageDialog(null, "\nLogin efetuado com sucesso! Bem Vindo!" + "\nAdministrador:" + auxAdministrador);
            
            new FormularioCadastro().setVisible(true);
        } else {
            JOptionPane.showMessageDialog(null, "Erro ao efetuar Login! Tente novamente.");
        }

    }

E a classe Login estende o quê? Provavelmente é JDialog ou JFrame.
Ou seja, o Login é um JDialog (ou JFrame, depende do que tu estendeu). :slight_smile:

Então é interessante parar de dar muro em ponta de faca e recaptular. :wink:

Fez sem instanciar o quê? Não entendi.

Pois é, você ainda não pôs o setVisible(false), então não vai fechar mesmo.