Setando janelas no java

7 respostas
Legolas

e ai pessoal…estou aprendendo muito aqui no GUJ…mais ainda tenho duvidas, pois sou iniciante

estou criando um aplicativo no netbeans e gostaria de saber como setar um botão para uma outra janela. Ex:

na janela principal eu tenho o botão cadastro, clicando nesse botão ele abriria a janela do cadastro e ao terminar de cadastrar e salvar, clicando no botão Fechar, ele fecharia a janela de Cadastro e voltaria para a janela principal…eu consegui setar o botao da janela principal para abrir a janela de Cadastro, mas qual seria o codigo para fechar e foltar a janela Principal?

agradeço qulquer ajuda

7 Respostas

leandro.cunha

Segue abaixo!
.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

TEC.ER

Isso mesmo esse metodo é legal que se voce ter uma tela que mostra os dados do cliente ao cadastra e abrir , ele ja retorna o propio dado cadastrado…

Gabriellf

Há duas maneiras de se resolver isso.
A primeira maneira é definir a janela de cadastro como um JDialog, definindo ele como modal através do método setModal(true), e definindo a propriedade de fechamento, conforme o Leandro colocou. No evento do botão “Cadastro”, da tela principal, ficaria o seguinte código:

TelaCadastro telaCad = new TelaCadastro();
telaCad.setVisible(true);
//esta próxima linha só será executada quando a tela de cadastro for fechada
this.atualizarDados(); //supondo que exista um método chamado atualizarDados

Outro forma seria o usar a classe WindowAdapter. Mas, para isso, quando a tela de cadastro for aberta, a tela principal deve ser fechada. Ficando:

//construtor da tela de cadastro
public TelaCadastro(){
     //...
     //para a tela não fechar diretamente, pois o fechamento será tratado pela Adaptadora
     this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); 
     this.addWindowListener(new Adaptadora());
}

//cria-se uma classe interna para a WindowAdapter
private class Adaptadora extends WindowAdapter{
    @Override 
    public void windowClosing(WindowEvent e){
        new TelaPrincipal().setVisible(true);
        TelaCadastro.this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        TelaCadastro.this.dispose();
    }
}
Legolas

Leandro…valeu a dica…funciona que é uma maravilha…

Legolas

Gabriel…eu sempre vejo o pessoal falar aqui que é melhor fazer uma janela de cadastro em JDialog, porque , especificamente, assim é melhor…pois fiz uma janela de cadastro em jframe mesmo…e funcionou…vc poderia me explicar a diferença?

E obrigado pela dica.

Gabriellf

Uma das principais diferenças, entre o JFrame e o JDialog, é o atributo modal do JDialog. Caso ele seja verdadeiro, toda janela aberta abaixo do JDialog fica inacessível, ou seja, se você tem uma tela principal, que chama a tela de cadastro, assim que a tela de cadastro for aberta, a tela principal fica inativa; o usuário poderá interagir apenas com a tela de cadastro. A partir do momento que a tela de cadastro é fechada, a tela principal volta a ficar acessível.

Nesse exemplo, assim que a instrução telaCad.setVisible(true) é executada, a tela principal fica inacessível para o usuário. Quando a tela de cadastro for fechada a instrução this.atualizarDados() é executada.

No caso do JFrame, ele não permite isso.

TEC.ER

O JDialog é bom, pois ele faz com que o usuarios nao abra varias telas enquanto esta manipulando uma, o que pode trava o sistema…

Criado 17 de janeiro de 2016
Ultima resposta 19 de jan. de 2016
Respostas 7
Participantes 4