Gostaira de saber após ter instanciado um objeto como um JPanel por exemplo, se é possível retirar ele da memória como se fosse uma “janela sendo fechada”
Imagina que ao clicar em um botão esse JPanel é instanciado e adicionado em um container e ao clicar em outro botão ele é “destruído” e desaparece do container. Não quero usar o “hide” entende?
se eu entendi bem o q quer fazer, pra retirá-lo da memória é só torna-lo elegivel para o garbage colector, o q fará q o objeto seja destruído:
refereciaDoSeuJPanel = null;
Não sei se é isso q vc quer mas sua intenção é evitar que fique sujeira nesse panel na próxima vez que ele por aberto?
È só vc setar ele como null na construção. Assim, se já existirem dados anteriores ele apaga antes de colocar os dados novos.
Bom, o que aconteceu comigo, as vezes eu clicava 2 vezes sem querer, e abria 2 janelas iguais, para evitar isso eu fiz uma singleton que só deixa abrir uma vez. Só que ai que está o problema ele só abre uma vez durante a execução, se eu quiser fechar a janela e voltar a ela de novo, ela não abre mais.
Alguem sabe uma possível solução ?
Obrigado.
[quote=lucao]Bom, o que aconteceu comigo, as vezes eu clicava 2 vezes sem querer, e abria 2 janelas iguais, para evitar isso eu fiz uma singleton que só deixa abrir uma vez. Só que ai que está o problema ele só abre uma vez durante a execução, se eu quiser fechar a janela e voltar a ela de novo, ela não abre mais.
Alguem sabe uma possível solução ?
Obrigado.[/quote]
Mas hide_on_close não serve justamente pra isso? poder abrir a mesma janela dnovo?
Se vc colocar ela como null no começo ela sempre vai abrir sem dados anteriores como se fosse uma tela nova.
Blz, vou fazer diferente entao. Tirei a singleton aqui, Mas o problema de clicar 2 vezes vai voltar. Como faço para desabilitar a janela que não está em foco, como se fosse o showmodal do Delphi ?
qualquer solucao pode servir:
-se vc implementar as demais telas como JDialog, podera torna-las modais (solucao mais simples);
-pode manter variavel que referencia o JFrame enquanto esta esta aberta, setando-a com null ao fechar (± o comportamento que vc queria) e apenas criar novas instancias quando esta variavel for nula;
-pode desabilitar o botao/frame enquanto o segundo frame estiver visivel (porem, eh preferivel fazer o frame como JDialog modal nesse caso)
Obrigado, eu fiz a do JDialog e ficou muito bom, bem o que eu esperava. Mas eu cheguei a dar uma pesquisada sobre JInternalFrame, achei bem interessante. Vcs podem me dizer alguns contextos que IFrame é bastante utilizado ?
Obrigado !
[quote=Ricardo Siqueira]Não sei se é isso q vc quer mas sua intenção é evitar que fique sujeira nesse panel na próxima vez que ele por aberto?
È só vc setar ele como null na construção. Assim, se já existirem dados anteriores ele apaga antes de colocar os dados novos.
[/quote]
Se você fez um singleton, deve ter um método getInstance em algum canto… Cria um método destroiInstance e o q esse método faz é setar a instancia como null.