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. 
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