Fechar um JFrame filho sem que o comando feche o JFrame Mãe.
Boa tarde galera!
Andei pesquisando na internet e aqui mesmo no fórum, mas não consegui achar a resposta para meu problema. (acho que procurei mal)
Vamos lá:
Tenho um JFrame mãe. Dentro deste JFrame tenho um menu que chama a operação de uma classe Cadastro(JFrame filho (até aí beleza)). Mas, quando eu fecho o JFrame filho ele fecha também o JFrame mãe.
Agora a pergunta:
Qual método devo usar para que ao fechar o JFrame filho não feche o JFrame mãe?
* Desculpe pelos mãe e filho, mas achei legal usar esse linguajar por uma questão didática.
:mrgreen:
Elton Fonseca
Curtidas 0
Respostas
Vagner
09/04/2009
tenta por
JFrame filho.setVisible(false);
GOSTEI 0
Mauricio Bento
09/04/2009
Acho q vc n deveria usar dois jFrame, use o Jdialog no lugar do seu JframeFilho. Vai ficar mais fácil.
No Jdialog vc passa pelo constutor dele o jFrame
Flw
GOSTEI 0
Guilherme
09/04/2009
calma^^
bem mais fácil
no teu JFrame filho
tem uma opção
"setDefaultCloseOperation()"
com vários parâmetros
o último provavelmente é "exit_on_close" (se tu criou no netbeans, claro)
troca esse parametro para "hide_on_close" =)
GOSTEI 0
Everton Barros
09/04/2009
Acho q vc não pesquisou direito.
http://www.javafree.org/javabb/viewtopic.jbb?t=867369
GOSTEI 0
Elton Fonseca
09/04/2009
Vamos lá pessoal!
É o seguinte:
Tenho uma classe chamada ExpertSolution (que de esperto ainda não tem nada :hauhau: )
O projeto é o seguinte:
Vou ter um JFrame chamado ExpertSolution (JFrame mãe) que irá chamar muitas outras classes. Um exemplo é uma classe que chamo de CadastroClientes.
Essa é tal JFrame mãe.
A classe ExpertSolution chama a ação da classe CadastroClientes (JFrame filho)
Sei que vocês devem estar com medo dos monstros acima, mas estou aprendendo. (Sugestões são bem vindas!)
package System; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ExpertSolution extends JFrame { JMenuBar barra; JMenu opcoes; JMenuItem cadastroClientes, cadastroFuncionarios, sair; public ExpertSolution(){ super("Expert Solution"); Container tela = getContentPane(); tela.setLayout(null); barra = new JMenuBar(); setJMenuBar(barra); opcoes = new JMenu("Cadastros"); barra.add(opcoes); cadastroClientes = new JMenuItem("Cadastro de clientes"); cadastroClientes.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ CadastroClientes cadastroClientes = new CadastroClientes(); } } ); cadastroFuncionarios = new JMenuItem("Cadastro de Funcionários"); sair = new JMenuItem("Sair"); sair.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ int opcao; Object[] BtSair={"Sim","Não"}; opcao = JOptionPane.showOptionDialog(null,"Deseja sair desta operação?","Fechar", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, BtSair, BtSair[0]); if(opcao == JOptionPane.YES_OPTION) System.exit(0); } }); //cria tecla de atalho para os menus ítens cadastroClientes.setMnemonic(KeyEvent.VK_L); cadastroFuncionarios.setMnemonic(KeyEvent.VK_F); sair.setMnemonic(KeyEvent.VK_S); opcoes.add(cadastroClientes); opcoes.add(cadastroFuncionarios); opcoes.add(sair); this.setExtendedState(MAXIMIZED_BOTH); setVisible(true); setLocationRelativeTo(null); } public static void main(String[] args) { ExpertSolution app = new ExpertSolution(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
package System; import javax.swing.*; import javax.swing.text.*; import java.awt.*; import java.text.*; import java.awt.event.*; public class CadastroClientes extends JFrame { JLabel RazaoSocial, Cnpj, IscricaoEstadual, Endereco, Bairro, Cidade, Cep, Estado, Telefone; JTextField TRazaoSocial, TCnpj, TIscricaoEstadual, TEndereco, TBairro, TCidade, TCep, TEstado, Ttelefone; JFormattedTextField JfRazaoSocial, JfCnpj, JfCep; JButton BtSalvar, BtSair; MaskFormatter mascaraCnpj, mascaraInscricaoEstadual, mascaraCep, mascaraTelefone; public CadastroClientes(){ super("Cadastro de Clientes"); Container tela = getContentPane(); setLayout(null); //atribuição de valores para os JLabels RazaoSocial = new JLabel("RazaoSocial"); Cnpj = new JLabel("Cnpj"); IscricaoEstadual = new JLabel("Iscricao Estadual"); Endereco = new JLabel("Endereco"); Bairro = new JLabel("Bairro"); Cidade = new JLabel("Cidade"); Cep = new JLabel("Cep"); Estado = new JLabel("Estado"); Telefone = new JLabel("Telefone"); try{ mascaraCnpj = new MaskFormatter("##-###-###/####-##"); mascaraInscricaoEstadual = new MaskFormatter("###.###.###"); mascaraCep = new MaskFormatter("#####-###"); mascaraTelefone = new MaskFormatter("(##)-####-####"); mascaraCnpj.setPlaceholderCharacter('_'); mascaraInscricaoEstadual.setPlaceholderCharacter('_'); mascaraCep.setPlaceholderCharacter('_'); mascaraTelefone.setPlaceholderCharacter('_'); }catch(ParseException excp){} //atribuição dos valores para os JTextsFilds TRazaoSocial = new JTextField(50); TCnpj = new JFormattedTextField(mascaraCnpj); TIscricaoEstadual = new JFormattedTextField(mascaraInscricaoEstadual); TEndereco = new JTextField(50); TBairro = new JTextField(20); TCidade = new JTextField(20); TCep = new JFormattedTextField(mascaraCep); TEstado = new JTextField(20); Ttelefone = new JFormattedTextField(mascaraTelefone); //atribui um botão ao JFrame BtSalvar = new JButton("Salvar"); BtSair = new JButton("Sair"); //define os posicionamentos e as larguras de cada JLabel RazaoSocial.setBounds(50,20,80,20); Cnpj.setBounds(50,60,80,20); IscricaoEstadual.setBounds(50,100, 100,20); Endereco.setBounds(50,140,80,20); Bairro.setBounds(50,180,80,20); Cidade.setBounds(50,220,80,20); Cep.setBounds(50,260,80,20); Estado.setBounds(50,300,80,20); Telefone.setBounds(50,340,80,20); //define posicionamento dos JTextsFields TRazaoSocial.setBounds(125,20,200,20); TCnpj.setBounds(110,60,130,20); TIscricaoEstadual.setBounds(170,100,80,20); TEndereco.setBounds(110,140,200,20); TBairro.setBounds(110,180,100,20); TCidade.setBounds(110,220,150,20); TCep.setBounds(110,260,70,20); TEstado.setBounds(110,300,20,20); Ttelefone.setBounds(110,340,100,20); // define o posicinamento do botão salvar BtSalvar.setBounds(150,420,100,20); BtSalvar.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ JOptionPane.showMessageDialog(null, "O usuário foi cadastrado com sucesso!"); } }); BtSair.setBounds(280,420,100,20); BtSair.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ int opcao; Object[] BtSair={"Sim","Não"}; opcao = JOptionPane.showOptionDialog(null,"Deseja sair desta operação?", "Fechar", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, BtSair, BtSair[0]); if(opcao == JOptionPane.YES_OPTION) System.exit(0); } }); //define techa de atalho BtSair.setMnemonic(KeyEvent.VK_S); //determina o botão Salvar como foco após precionar o enter getRootPane().setDefaultButton(BtSalvar); //adiciona os JLabels acima na janela tela.add(RazaoSocial); tela.add(Cnpj); tela.add(IscricaoEstadual); tela.add(Endereco); tela.add(Bairro); tela.add(Cidade); tela.add(Cep); tela.add(Estado); tela.add(Telefone); //adiciona os TextsFields acima na janela tela.add(TRazaoSocial); tela.add(TCnpj); tela.add(TIscricaoEstadual); tela.add(TEndereco); tela.add(TBairro); tela.add(TCidade); tela.add(TCep); tela.add(TEstado); tela.add(Ttelefone);; //adiciona o botão salvar na tela tela.add(BtSalvar); tela.add(BtSair); //define que o usuário não pode redimensionar a janela setResizable(false); //define tamanho da janela setSize(500,500); //define janela como visivel setVisible(true); //abre janela no centro setLocationRelativeTo(null); } public static void main(String[] args) { CadastroClientes app = new CadastroClientes(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
GOSTEI 0
Carlos Heuberger
09/04/2009
linha 105: System.exit(0);
voce está forçando o sistema, ou seja, a máquina virtual a terminar. Isso implica em fechar/parar tudo, tanto faz se for um JFrame, um JDialog, um processamento rodando no background... tudo que estiver rodando na máquina virtual será terminado.
Para fechar a janela use o setVisible(false) ou dispose() do JFrame.
o dispose() libera os recursos usados (serão recriados se necessário)
o setVisible(false) apenas [i]esconde[/i] o JFrame
[]]
... if(opcao == JOptionPane.YES_OPTION) dispose(); // ou CadastroClientes.this.dispose(); ...
GOSTEI 0
Elton Fonseca
09/04/2009
Muito obrigado! Mais tarde eu vejo se irá funcionar no meu código.
Valeu pela explicação! :evil:
GOSTEI 0
Carlos Naves
09/04/2009
[quote="exmokvra"]calma^^
bem mais fácil
no teu JFrame filho
tem uma opção
"setDefaultCloseOperation()"
com vários parâmetros
o último provavelmente é "exit_on_close" (se tu criou no netbeans, claro)
troca esse parametro para "hide_on_close" =)
Valeu exmokvra... sua dica foi fundamental para mim... no meu caso usei o parametro DISPOSE para destruir quando clicar no fechar.
Obrigado.
GOSTEI 0
Sidney
09/04/2009
[quote="exmokvra"]calma^^
bem mais fácil
no teu JFrame filho
tem uma opção
"setDefaultCloseOperation()"
com vários parâmetros
o último provavelmente é "exit_on_close" (se tu criou no netbeans, claro)
troca esse parametro para "hide_on_close" =)
Vlw cara, eu fiz assim, mas eu percebi que a opção hide só faz esconder o frame, dai eu vi também tem a opção dispose que fecha o frame sem fechar o pai.
GOSTEI 0