Então estou com um probleminha com esse JInternalFrame.
Aprendi a mexer com ele ontem, só que eu abro ele normal, fecho ele, e abro dinovo, dae ele num abre, fiz uns testes, ele fica aberto, tipo num é destruido, como faço pra destruir ele quando clicar no “X”?
Ta de seguinte forma:
Classe inicial tem um JMenuBar que tem um JMenuItem chamado Funcionario, dae ele abre o JInternalFrame que esta numa outra classe (outro arquivo).
jhoey, olhando por auto o seu códgio, vejo que voce está dando uns vacilos.
if(event.getSource()==Sair){
dispose();}
Vc tá dando dispose em quê mesmo?No seu JFrame???
Consideradno que vc tem uma váriavel desse tipo:
addFuncionarios consulta; que extende JInternalFrame, e implementa InternalFrameListener, eu faria assim na sua classe Inicial:
//método responsável pela criação da tela de consulta de dadosprivatevoidexibirConsulta(ActionEventevt){if(consulta==null){// inicia frame internoconsulta=newaddFuncionarios(this);// adiciona o internalFrame no DesktopPane desktop.add(consulta);}// Exibe o frame consulta.setVisible(true);}//é público para poder ser executado por outra classepublicvoidfecharConsulta(ActionEventevt){// verifica se há uma referencia válida para o objeto if(consulta!=null){// libera o objeto consulta.dispose();consulta=null;}}
E na sua addFuncionarios poria um construtor assim:
public addFuncionarios (Inicial i){//recebe uma referência da classe Inicial
super("Funcionarios blablabla SA...");
this.i=i;
iniciarSeusComponentes();//chama o método...
}
Isso amarra a sua internalframe a sua classe Inicial.
E não use nomes de classes em minúsculas!!!
Bem-vindo ao GUJ. :wink:
jhoey
Brigado pelo Bem-Vindo.
O dispose(); é no JFrame mesmo, tem um JMenuItem chamado Sair, num ta com as nomeações corretas
Mas eu quero que quando ele saia destrua ele, e se o usuário apertar no JMenuItem pra abrir ele denovo, se ele estiver aberto ele dar um moveToFront();
Se estiver fechado “null” montar ele novamente.
Criei essa classe para verificar se um JInternalFrame está ou não aberto, desse modo ele não permite que você abra duas instancias do mesma tela.
Antes de você instanciar o JInternalFrame, coloque um if e use o método verificarframe para checkar se ele está ou não aberto. Depois você instancia ele normal e adiciona ao JDesktopPane da aplicação!
A
Alexmaoli
VagnerMG, valeu pela classe… estava procurando isso mesmo.
Agora só uma dúvida, como que faço para exibir o JInternalFrame que já existe?
Consegui verificar, mas se ele estiver atrás de outros JInternalFrame, ou até mesmo minimizado, como faço para reposicionar ele novamente no centro da tela, na frente dos outros frames?
ao clicar novamente no menu menu que deseja ele irá verificar se já está instanciado, caso positivo, exibirá.
Silvio Guedes
A
Alexmaoli
Silvio, funcionou direitinho, só tenho uma dúvida, para funcionar tive que colocar no netbeans a opção defaultCloseOperation como HIDE, então entendo que ele somente está escondendo a tela, e não fechando ela.
Quero saber agora onde e como invoco o método FecharForm()?
Estou usando o netbeans e as ferramentas dele, não estou escrevendo o código todo.
Mais uma vez obrigado.
S
silviogs
Olá amigo
ok. Crie um botão fechar e ajuste o evento para ele. No lugar de botoesRodaPe.jButtonFechar.addActionListener coloque:
Silviogs, pelo botão conforme vc passou eu consegui, agora como faço isso pelo botão padrão de fechamento da janela [X] ? Qual evento e onde está esse evento?
Senão vou ter que desabilitar isso e permitir que seja fechado somente pelo botão que eu colocar.