Destruir um objeto instanciado? (SOLUCIONADO)

14 respostas
P

Olá, como vai?

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?

Obrigado.

14 Respostas

D

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

Bom, seu eu quisesse destruí-lo ao sair(no x do topo da janela), como ficaria o evento ?

R

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

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

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

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

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

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

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

T
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)
L

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

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

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

Ja resolvi, coloquei como JDialog mesmo, resolveu o problema.
Obrigado.

Criado 30 de março de 2006
Ultima resposta 30 de mar. de 2006
Respostas 14
Participantes 7