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