Determinando o fechamento de um JFrame por botão

Tenho uma aplicação onde existe um JFrame principal e um JFrame que é chamado dentro do programa para ser uma tela auxiliar. Quero fechar essa tela auxiliar (que é JFrame) utilizando um botão fechar dentro dela. No tratamento de eventos como deve ficar o comando associado ao botão fechar? Esse JFrame está configurado com um DISPOSE_ON_CLOSE para ir para a janela de nível superior e fecha adequadamente quando clico no X no canto da janela, mas gostaria que um botão também tivesse essa prerrogativa, veja o código abaixo:

    private void btFecharActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }

Qual o código que devo digitar no lugar de // TODO add your handling code here?

Obrigado,
Ronaldo

Se para abrir um JFrame você chama o método setVisible(true).

Pra fechar é só chamar setVisible(false).

1 curtida

Note, Staroski, que o setVisible foi usado diretamente associado a um objeto da classe JFrame, da seguinte forma:

jFrame2.setVisible(true);

Dentro do arquivo GuiCadastroProdutos.java, porém o setVisible(false) que fecha o JFrame jFrame2 tem que ser usado dentro de um método ligado a um botão sair que está no arquivo GuiCadForProduto.java que não reconhece o identificador jFrame2 e não aceita setVisible(false) isolado (eu já testei, dá erro de compilação). Veja onde deve ser fechado o JFrame:

    private void btFecharActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }

É um trecho da classe GuiCadForProduto e o código que fecha JFrame ao acionar o botão fechar deve estar em // TODO add your handling code here:…

Se você quiser ver os códigos dos arquivos .java é só me escrever que eu publico aqui, vocês tem alguma idéia de como faço o botão fechar esse objeto JFrame?

Obrigado,
Ronaldo

Acho que pra você ainda não está claro o que é uma classe e o que é um objeto e como objetos trocam mensagens.

Há alguns meses você estava com as mesmas dúvidas.
Ou você passa uma referência do JFrame2 para o GuiCadastroProdutos ou faz suas janelas serem singletons, de forma a você sempre manipular o mesmo objeto.

Sim, variavelDoJFrame2.setVisible(false).

Por gentileza, qual código tenho que colocar no lugar de // TODO add your handling code here:…

(Não tá caindo a ficha… por favor, seja explicito).

Atenciosamente,
Ronaldo

Peguei a conversa no meio, mas se a ideia é fechar o frame não seria somnente chamar o metodo dispose na ação do botão?

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

[/quote]

1 curtida

Se você está dizendo que a classe que declara o método btFecharActionPerformed é um JFrame, então é só chamar o método setVisible(false):

private void btFecharActionPerformed(java.awt.event.ActionEvent evt) {                                         
    setVisible(false);
}

Perfeito, vou tentar o dispose.

Muito obrigado,
Ronaldo

P.S.: acabei de testar o dispose() e deu certo do jeito que eu queria. Obrigado.

Você poderia postar os fontes das suas classes, ajuda bastante, pois não precisamos quebrar a cabeça tentando adivinhar sua implementação