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

09/04/2009

0

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

Elton Fonseca

Responder

Posts

09/04/2009

Vagner

tenta por
JFrame filho.setVisible(false);
Responder

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

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

09/04/2009

Everton Barros

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

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

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

09/04/2009

Elton Fonseca

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

06/06/2010

Carlos Naves

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

01/06/2016

Sidney

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar