Boa noite a todos.
[quote=YuriPlanzo]Sei que esse topico é cavernoso, mas não achei solução na internet pro problema dele…
Acabei resolvendo sozinho mesmo, de um modo EXTREMAMENTE SIMPLES:
Primeiro instancie o JFrame que deseja chamar.
private Fornecedor_Dados_Adicionais Chamar_Fornecedor = new Fornecedor_Dados_Adicionais();
Depois use essa condicional no botão ou evento que deverá chamar o JFrame.
if (!Chamar_Fornecedor.isVisible())
{
Chamar_Fornecedor.setVisible(true);
}
Pronto… É absolutamente indispensável que o JFrame seja instanciado fora de qualquer metodo como um variável global (no caso private, hehe). Se você deixar pra instancia dentro do botão/evento toda vez clicar no botão ou o evento acontecer a classe será instanciada denovo e a nova instancia terá o “visible(false)”. É importantissimo instanciar por fora.
Para sair do JFrame que foi chamado sempre use o .setVisible(false), para que a condicional possa tornar a fazer efeito!
Espero que ajude alguem algum dia![/quote]
Com todo respeito, se voce acha que esse tópico é cavernoso, porém a sua dica é mais cavernosa ainda.
Imagine voce declarar todos os seus formulários desta forma:
private Fornecedor_Dados_Adicionais Chamar_Fornecedor = new Fornecedor_Dados_Adicionais();
Agora imagine se a sua aplicação contém 85 formulários com 85 declarações destas, imagine o quanto de memória voce vai ocupar, isto sem contar também que o Frame principal está instanciado, somente para voce controlar a visibilidade dos frames, isto é, quanto o assunto, é claro, é aplicações Desktop, porque em aplicações Web isto é terrível
Nada te impede de fazer isto, porém esta é uma prática pouco recomendada em sistemas SDI (Single Document Interface ou Interface de Documento Único), visto que o Frame Principal não mantém controle sobre os demais formulários abertos.
Já em sistemas MDI (Mutiple Document Interface ou Interface de Documentos Múltiplos), ai sim, voce pode até manter todos os formulários abertos, eis que existe um container em java chamado JDesktopPane que controla todos os JInternalFrames, entretanto mesmo assim não constitui uma boa prática de POO, até porque você não consegue atingir a velocidade da máquina para consultar todos os formulários ao mesmo tempo, o máximo que voce conseguirá e poluir a tela, e mesmo que os formulários esteja escondidos, há o problema de desempenho da aplicação em ocupação de memória, onde o JVM tem que administrar todo esses processos abertos. Portanto, manter todos os formulários abertos em que voce não esteja usando-o é disperdício de recurso que podem baixar cada vez mais o desempenho da sua aplicação.
Uma solução simples já foi apresentada aqui, ou seja, utilizar o JDialog, onde voce pode até fazer com que somente o FramePrincipal seja JFrame e os demais formulários possam ser JDialogs, entretanto há também a necessidade de se analisar o projeto com as seguintes questões, tanto em sistemas SDI quanto em MDI:
1º) Há a necessidade de manter todos os JFrames, Frames ou JInternalFrames abertos :?:
2º) Há a necessidade de que todos os Formulários sejam JDialogs ou apenas somente um ou no máximo tres :?:
Se vocês perceberem a pergunta do post do nosso amigo, verá que ele só necessita apenas de um JDialog, portanto a dica mais recomendade neste caso ele que utilize o JDialog.
Um abraço.