Eu fiz um projeto com vários JFrame. Toda vez que eu preciso abrir um JFrame, eu verifico se ele é null. Se ele for null, então eu crio uma instancia dessa janela:
NomeFrame nome = new NomeFrame();
nome.setvisible = true
etc...
Toda vez que eu fecho um JFrame eu uso o metódo this.dispose.
Até aqui tudo certo, sem problema. O problema é quando eu preciso abrir esse mesmo JFrame que acabei de fechar, pois neste momento o objeto não é mais nulo pois, já foi instanciado agora pouco.
Para abrir quando não é mais nulo, eu uso:
nome.setvisible = true;
A janela abre normal, mas os métodos que precisam ser acionados quando o JFrame se abre para dar um “REFRESH” na janela não é acionado.
Alguém já passou por isso? Tem alguma solução correta sem ser gambiarra?
O problema tá justamente ai, pois Dispose significa que todos os recursos pra exibir aquela janela serão jogados fora. Pro seu caso, um hide _on close deve bastar.
Olá elissonandrade,
O hide_on_close também não joga fora o frame e por isso ele também não recarrega os métodos de inicialização do frame.
Talvez se eu deixasse o objeto nulo ao fechar a janela ele seria forçado a criar um novo objeto JFrame para assim recarregar os métodos de inicialização.
Eu fiz um projeto com vários JFrame. Toda vez que eu preciso abrir um JFrame, eu verifico se ele é null. Se ele for null, então eu crio uma instancia dessa janela:
NomeFrame nome = new NomeFrame();
nome.setvisible = true
etc...
Toda vez que eu fecho um JFrame eu uso o metódo this.dispose.
Até aqui tudo certo, sem problema. O problema é quando eu preciso abrir esse mesmo JFrame que acabei de fechar, pois neste momento o objeto não é mais nulo pois, já foi instanciado agora pouco.
Para abrir quando não é mais nulo, eu uso:
nome.setvisible = true;
A janela abre normal, mas os métodos que precisam ser acionados quando o JFrame se abre para dar um “REFRESH” na janela não é acionado.
Alguém já passou por isso? Tem alguma solução correta sem ser gambiarra?
Abraços.[/quote]
Aqui abre normal fazendo dessa forma. Que tipo de métodos que você não está conseguindo utilizar? São os eventos dos componentes?
Ah, o poblema é que depois de fechar o Jframe, você usa o métood dispose, então não importa o método de fechamento, sempre vai jogar tudo fora. Nesse caso, você tem que para de chamar esse metodo depois de fechar a janela.
Se você quer dar o refresh, uma coisa que pode ajudar é a criar um windowlistenner para seu jframe. Dá uma pesquisada nesse tipo de listener.
Agradeço as respostas, vou tentar explicar mais detalhadamente.
O usuário abre a tela inicial do sistema e em seguida solicita a abertura da tela BANCO.
Eu uso o código abaixo para abrir um JFrame que o usuário solicitou:
Como podem verificar, se a tela ainda não estive sido aberta ele da um new no JFrame e exibe isso para o usuário. O Jframe Banco executa os métodos dele que ficam no construtor sem nenhum problema.
Se o usuário minimizar a tela e tentar abrir a mesma tela novamente, ele não deixa, pois o objeto já esta instanciado e como podem ver, ele só manda um setVisible=true.
Quando um usuário fecha esse JFrame, eu uso o método this.dispose() (de dentro do novo frame).
A Janela fecha normal conforme eu gostaria.
O “problema” é quando eu abro novamente esse JFrame que foi encerrado. O JFrame abre novamente, mas não executa os métodos que eu coloco dentro do construtor.
public Banco() {
initComponents();
setLocationRelativeTo(null);
consultarBanco();
tFUsuarioLogado.setEditable(false);
}
Sendo assim, o método consultar saldo não é executado e consequentemente o usuário não “enxerga” a atualização do “consultarBanco”.
É isso que eu quis dizer que a tela não é atualizada…
O construtor só é chamado quando criado o objeto ou seja com você da um new SeuJFrame(). Então para resolver isso você pode sempre que quiser abrir o JFrame criar uma nova instancia para ele. Outra dica seria tirar a chamada do construtor e deixar esse método como public e sempre chama-lo toda vez que precisa-se usa-lo ex.:
seuJFrame.setVisible(true);
seuJFrame.atualizar(); //atualiza dados
[quote=Ivan Alves]O construtor só é chamado quando criado o objeto ou seja com você da um new SeuJFrame(). Então para resolver isso você pode sempre que quiser abrir o JFrame criar uma nova instancia para ele. Outra dica seria tirar a chamada do construtor e deixar esse método como public e sempre chama-lo toda vez que precisa-se usa-lo ex.: