Fechar um JFrame filho sem que o comando feche o JFrame Mãe.

09/04/2009

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

Respostas

09/04/2009

Vagner

tenta por
JFrame filho.setVisible(false);
Responder Citar

09/04/2009

Mauricio Bento

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
Responder Citar

09/04/2009

Guilherme

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" =)
Responder Citar

09/04/2009

Everton Barros

Acho q vc não pesquisou direito. http://www.javafree.org/javabb/viewtopic.jbb?t=867369
Responder Citar

09/04/2009

Elton Fonseca

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.
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);

	}

}
A classe ExpertSolution chama a ação da classe CadastroClientes (JFrame filho)
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);
		

	}

}
Sei que vocês devem estar com medo dos monstros acima, mas estou aprendendo. (Sugestões são bem vindas!)
Responder Citar

09/04/2009

Carlos Heuberger

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.
...
    if(opcao == JOptionPane.YES_OPTION)  
        dispose();  // ou CadastroClientes.this.dispose();  
...
o dispose() libera os recursos usados (serão recriados se necessário) o setVisible(false) apenas [i]esconde[/i] o JFrame []]
Responder Citar

09/04/2009

Elton Fonseca

Muito obrigado! Mais tarde eu vejo se irá funcionar no meu código. Valeu pela explicação! :evil:
Responder Citar

06/06/2010

Carlos Naves

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.
Responder Citar

01/06/2016

Sidney

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.
Responder Citar