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;
L
lucao
Bom, seu eu quisesse destruí-lo ao sair(no x do topo da janela), como ficaria o evento ?
R
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.
L
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.
R
Ricardo_Siqueira
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.
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.
L
lucao
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 ?
R
Ricardo_Siqueira
Fácil.
TelaPrincipal.botaoQueAbreTela.setEnabled(false);
na primeira linha do panel q vc acabou de abrir
Com o botão desabilitado o usuário não consegue abrir outra tela.
L
lucao
Cara, soh me da uma luz aqui porque tá dificil.
A estrutura do programa eh essa:
Menu Principal
|
Tela de Busca
|
Tela de Cadastro
Os 3 são JFrame, uma tela leva a outra, eu tava lendo sobre colocar as 2 telas em vez de Jframe mas como JDialog, que que tu acha ?
R
Ricardo_Siqueira
lucao:
Cara, soh me da uma luz aqui porque tá dificil.
A estrutura do programa eh essa:
Menu Principal
|
Tela de Busca
|
Tela de Cadastro
Os 3 são JFrame, uma tela leva a outra, eu tava lendo sobre colocar as 2 telas em vez de Jframe mas como JDialog, que que tu acha ?
Dá uma pesquisada sobre internalFrame…pode ser o q vc precisa
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 !
P
peczenyj
Quando vc fecha uma janela no X (nos *nix da vida) vc manda um sinal (acho que o 15) que mata os processos que foram originários naquele terminal.
Se vc tem uma janela swing, deves ter algo semelhante, basta pesquisar.
V
velo
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.
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.
VELO
L
lucao
Ja resolvi, coloquei como JDialog mesmo, resolveu o problema.
Obrigado.