[SOLUÇÃO] Fechar JFrame - Metodologia Simples

Olá Amigos,
Venho a compartilhar mais uma simples metodologia resultado de minhas pesquisas.
Como fechar um JFrame através de outra Classe (independente do pacote).
Vamos lá?

No jFrame a ser fechado, lance o código:

//ATRAVÉS DA CLASSE JFrame IREMOS CRIAR O OBJETO frame.    
private static JFrame frame;

    //CRIAREMOS ESTE MÉTODO PARA RETORNAR O OBJETO frame CRIADO ACIMA
    public static JFrame meuJFrame(){
        return frame;
    }

    // NOSSO JFRAME É ESTE:
    public JFrame1() {
        /*
        ** AQUI ESTÁ O SEGREDO: IREMOS DIZER QUE NOSSO OBJETO frame RECEBERÁ NOSSO JFRAME.
        */        
        frame = this;

        initComponents();
        ...

Meio caminho já foi andado, agora iremos dar o famoso “dispose()” em nosso JFrame através de um método vindo de outra classe, vamos lá?

//MINHA NOVA CLASSE
public class NovaClasse{
    //METODO 'fecharJFrame'
    public void fecharJFrame(){
        //O OBJETO frame DA CLASSE JFrame RECEBERÁ O MÉTODO DE meuJFrame  DO JFRAME CRIADO jFrame1 
        JFrame frame = JFrame1.meuJFrame();
        //E POR FIM, IREMOS FECHAR O JFrame1 CRIADO  
        frame.dispose();
    }

}

Prontinho.

Como sempre digo, caso conheçam alguma maneira ainda mais simples, postem aqui. :smiley:

Desculpa e a sinceridade, mas pq vc não cria um blog e posta lá essas dicas? A ideia do fórum é postar dúvidas e contribuirmos com essas dúvidas, não passar receitas para a comunidade. Eu entendo a sua boa vontade, acho louvável, de verdade mesmo, mas o propósito de um fórum de dúvidas normalmente não é esse.

Em relação ao seu exemplo, tá bem estranho…

2 curtidas

Um brother fazia isso por aqui, ele começou a criar jogos em Java e ia avisando aqui de vez em quando.

O que você fez, @Henrique_Guilherme, ficaria bem legal no estilo do Medium, e isso até melhoraria a indexação dos seus posts.

2 curtidas

No Medium ou no dev.to que não tem paywall.

3 curtidas

O problema dessa abordagem é que se o JFrame1 for instanciado mais de uma vez, o seu atributo estático só vai ter a referência para a última instância.

Acho que seria bem melhor o JFrame1 ser singleton ou então você ter uma classe controladora ou uma factory para obter acesso às suas telas.

2 curtidas

Não entendi muito bem a questão de “se instanciar uma segunda vez…”

Tu teria um exemplo de código ou arquivo que explique essa problematização ? Desde já muito obrigado.

Imagina que em algum lugar você fez isso:

JFrame1 minhaPrimeiraJanela = new JFrame1();
minhaJanela.setVisible(true);

JFrame1 minhaSegundaJanela = new JFrame1();
minhaSegundaJanela.setVisible(true);

No seu exemplo:

public class NovaClasse{

    public void fecharJFrame(){
        JFrame frame = JFrame1.meuJFrame(); // esse código vai retornar a 'minhaSegundaJanela' e você não terá mais acesso à 'minhaPrimeiraJanela'
        frame.dispose();
    }
}
1 curtida