Não repetir IFrames no DesktopPane

9 respostas
cidfillippe

Galera eu to com uma dúvida…
Eu criei um menu que quando clicado exibe um internal frame… Só que quando clico novamente ele exibe um novo internal frame…
É possível fazer com que ele exiba o internalFrame já aberto?

9 Respostas

Felagund

vc tem que procurar o JDesktopPane se já existe um internalframe da mesma classe.

se existir vc não cria, se não vc cria.

[]'s

filipenf

usa o pattern singleton ao invés de criar uma instância cada vez.

cidfillippe

Como posso usar este pattern singleton?

filipenf

dá uma pesquisada no google, este pattern é bem conhecido e difundido. coloca ‘java singleton pattern’ que vc acha.

Felagund

Nesse caso não acho vantagem usar o singleton.

A tela pode ser acessada uma única vez o o sistema ficar aberto o dia todo.
E essa tela nunca será coletada pelo Garbage, consumindo recursos de maneira descessesarias.

Nem todos os padrões devem ser aplicados sempre. E esse eu acredito que o singleton se torne um anti-pattern

filipenf

Até concordaria com você se ele precisasse fazer isso em várias telas, mas pelo que entendi não é isso e ficar com a tela durante todo o tempo que a VM ficar aberta não seria um problema. Além disso, se ele quiser pode fazer algum mecanismo pra eliminar a reference dela ( tipo criar um killInstance ).

cidfillippe

Galera eu não posso conferir se o objeto é da mesma classe pq tem objetos que é da mesma classe mas são distintos… por exemplo tenho internalframe para add pessoas e outro para add livros… Aí fiz o seguinte…

Criei um método na classe que possui o desktoppane que add um novo internal frame que recebe como parametro o título e o JPane que ele adicionará…

e criei um método que remove o internal frame que possui o título que quero eliminar…

não sei se é uma boa prática mas ficou muito útil, já que os métodos são static posso adicionar e remover por qualquer que seja a classe de uma forma bem simples

Abraço

filipenf

Existem 1001 formas de se preparar nestom… heheheh

outra sugestão seria no frame que controla os InternalFrames vc ter um map que associasse um identificador da tela à instância do JFrame. Ou seja:

só que vc teria que criar a classe MyInternalFrame como sendo subclasse de JInternalFrame e criar um método tipo:

Desta forma, sempre que você criar uma tela, pode checar se ela já existe no mapa e, se não existir, criar e adicionar ela ao mapa.

brlima

essa idéia do filipenf é boa. mas não precisa extender. pode usar a propriedade setName() pra setar o nome e coloca ele como key da map. aí é só dar um get nesse map, se retornar nulo, significa que a janela não foi aberta. :slight_smile:

Map telas = new HashMap();
...
// ao abrir a tela::
JInternalFrame frame = telas.get("telaCadastro");
if(iframe != null){ iframe.setVisible(true); }
else { iframe = new FrameCadastro(); desktoppane.add(iframe); }

e por aí vai…

ps-off: tirando a poeira do usuário… :lol:

Criado 26 de junho de 2009
Ultima resposta 3 de jul. de 2009
Respostas 9
Participantes 4