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?
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
usa o pattern singleton ao invés de criar uma instância cada vez.
Como posso usar este pattern singleton?
dá uma pesquisada no google, este pattern é bem conhecido e difundido. coloca ‘java singleton pattern’ que vc acha.
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
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 ).
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
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.
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.
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: