Codigo para o botão Sair, fechando só o formulario

Java

09/04/2009

Prezado colega, Criei um botão no meu formulário e quero que ao clicar nele, eu apenas fecho este formulario e não a aplicação. Como devo fazer? aí o meu trecho de código:
				c.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e){
						System.exit(0);
					}
				});
 
Atenciosamente, Edson
Edson Amorim

Edson Amorim

Curtidas 0

Respostas

Juan Damasceno

Juan Damasceno

09/04/2009

Use o método dispose() do seu formulário.
GOSTEI 0
Rodrigo Scorsatto

Rodrigo Scorsatto

09/04/2009

cara da uma olhadinha nesse codigo:
public  void botaoX (){
           addWindowListener (new WindowAdapter () {
                  public void windowClosing (WindowEvent e) {
                         //caixa de dialogo retorna um inteiro
                         setVisible (false); // sai da tela em que esta
                         Principal.getInstance ().setVisible (true); //vai para a tela que você quiser...
                         
                  }
           });
GOSTEI 0
André Britto

André Britto

09/04/2009

Pessoal eu faria da seguinte forma...
private void formFrameClosing(javax.swing.event.InternalFrameEvent evt) {                                          
        this.fechar();
    } 

private void fechar(){
        if(javax.swing.JOptionPane.showConfirmDialog(null,"Deseja Fechar?","ATENÇÂO ",javax.swing.JOptionPane.YES_NO_OPTION )==0){
            this.dispose();
        }
    }
assim poderia colocar um botão fechar chamando o método fechar(); E prefia o dispose. Pelo que ja andei vendo sobre o setVisible(), esse método apenas esconde o form e não fecha!! Seu form continua instanciado... me corrijam se eu estiver errado ;)
GOSTEI 0
Henrique Freitas

Henrique Freitas

09/04/2009

Sempre uso o metodo dispose(); O setvisible(false) somente deixa invisivel, nao o fecha!
GOSTEI 0
Edson Amorim

Edson Amorim

09/04/2009

Prezados colegas, Estou tentando e estudando as 2 maneiras de fazer a sugestão de voces. Tentei primeiramente a sugestão do Henrique mas não estou sabendo bem como inserir as instruções no meu código. está dando alguns erros. Gostaria que se for possível, fizesse a correção no meu código já com as alterações abaixo:
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;


public class Relatorio1 extends JFrame {

        JLabel l;
        JTextField t;
        JButton b, c;
        Initial janela;

        public Relatorio1() {
                super("Consulta Contatos por Nome");
                Container tela = getContentPane();
                setLayout(null);
                l = new JLabel("Nome.: ");
                l.setBounds(20, 20, 100, 20);
                t = new JTextField(50);
                t.setBounds(20, 50, 250, 20);
                b = new JButton("Exibir Relatório");
                b.setBounds(20,  90, 130, 20);
                c = new JButton("Sair");
                c.setBounds(200, 90,  70, 20);
                tela.add(l);
                tela.add(t);
                tela.add(b);
                tela.add(c);
                b.addActionListener(new ActionListener() {
                                        public void actionPerformed(ActionEvent e) {
                                                janela = new Initial();
                                                janela.buscaTabela(t.getText());
                                                janela.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                                                janela.setVisible(true);
                                        }
                                });
			   //	c.addActionListener(new ActionListener() {
			   //		public void actionPerformed(ActionEvent e){
			   //     	       System.exit(0);
			   //	    	}
			   //	});
		//*****************************************
		//** inseri o seu código aqui...		
		private void Relatorio1Closing(javax.swing.event.InternalFrameEvent evt) {                                             
        this.fechar();   
         }    
  
        private void fechar(){   
        if(javax.swing.JOptionPane.showConfirmDialog(null,"Deseja Fechar?","ATENÇÂO ",javax.swing.JOptionPane.YES_NO_OPTION )==0){   
            this.dispose();   
        }   
        }  
		//**** Mas está dando erro    **********
		//******************************************	
				
                setSize(300, 200);
                setVisible(true);
                setLocationRelativeTo(null);

        }

        public static void main(String[] args) {
                Relatorio1 app = new Relatorio1();
                app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }

        
}
Atenciosamente, Edson
GOSTEI 0
Marcos

Marcos

09/04/2009

[quote="Amamorim"]
          //c.addActionListener(new ActionListener() {
	   //		public void actionPerformed(ActionEvent e){
	   //     	       System.exit(0);
	   //	    	}
	   //	});
Edson, experimenta descomentar essa parte do seu código ai e em vez de chamar o System.exit(0); vc chama o seu método fechar(); ;)
GOSTEI 0
Edson Amorim

Edson Amorim

09/04/2009

Prezado Marcos, Fiz isso conforme voce sugeriu. Funcionou... só que fexa totalmente a aplicação. Tem como eu fechar só o formulario? Atenciosamente, Edson
GOSTEI 0
Marcos

Marcos

09/04/2009

[quote="Amamorim"]
        public static void main(String[] args) {
                Relatorio1 app = new Relatorio1();
                //app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        }     

Edson , comenta a linha igual acima e tenta novamente...
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

Olha..eu não sou a pessoa mais experiente para dizer... Mas nas minhas aplicações, eu abro a janela anterior (janela para a qual você deseja retornar) e logo em seguida, fecho a janela atual... Por exemplo... dentro do método da ação, você coloca algo como: [b]Janela nova = new Janela(); [/b]//Janela é a classe para a qual vc deseja retornar [b]nova.setVisible(true);[/b]//abre a janela [b]setVisible(false);[/b]//fecha a janela atual Não sei se isso vai te ajudar muito... porque eu estou usando isso pra fechar as janelas no JFrame (=^.^=) Kol (=^.^=)
GOSTEI 0
Edson Amorim

Edson Amorim

09/04/2009

Lovely_kol, Obrigado pela ajuda!!, acho que é isso mesmo ou seja: eu clico no menu para chamar uma telinha para consulta. Ok. Se eu não quizer usar esta telinha e quizer abrir ourtra? aí, eu criei um bot]ao nesta telinha com o Nome de "Sair", para que ao clicar nele, como acontece quando a gente clica lá em cima naquele "x" aí, o formulario fecharia, mas só ele. O outro formulário, onde está o menu, continuaria aberto para escolha de outra opção!. Como é que voce faria isso? Edson
GOSTEI 0
Edson Amorim

Edson Amorim

09/04/2009

Olá Marcos Fabris, Fiz a sua sugestão mas não consegui ainda!!. Tirei o comentário daquela parte de código. Atenciosamente, Edson
GOSTEI 0
Marcos

Marcos

09/04/2009

[quote="lovely_kol"]Olha..eu não sou a pessoa mais experiente para dizer... Mas nas minhas aplicações, eu abro a janela anterior (janela para a qual você deseja retornar) e logo em seguida, fecho a janela atual... Por exemplo... dentro do método da ação, você coloca algo como: [b]Janela nova = new Janela(); [/b]//Janela é a classe para a qual vc deseja retornar [b]nova.setVisible(true);[/b]//abre a janela [b]setVisible(false);[/b]//fecha a janela atual Não sei se isso vai te ajudar muito... porque eu estou usando isso pra fechar as janelas no JFrame (=^.^=) Kol (=^.^=)
até seria uma saída, o problema é que ela vai continuar aberta só que invisível e consumindo memória... Edson vc está usando o JDesktopPane ou abrindo vários JFrames?
GOSTEI 0
Marcos

Marcos

09/04/2009

Edson, já vi o problema... está dando erro no método fechar pois vc está declarando ele dentro do método construtor.. tire de dentro do construtor.. aí é só chamar o método fechar assim..
c.addActionListener(new ActionListener() {  
                   public void actionPerformed(ActionEvent e){  
                            fechar();
                       }  
                });
:!:
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

[quote="Amamorim"]Lovely_kol, Obrigado pela ajuda!!, acho que é isso mesmo ou seja: eu clico no menu para chamar uma telinha para consulta. Ok. Se eu não quizer usar esta telinha e quizer abrir ourtra? aí, eu criei um bot]ao nesta telinha com o Nome de "Sair", para que ao clicar nele, como acontece quando a gente clica lá em cima naquele "x" aí, o formulario fecharia, mas só ele. O outro formulário, onde está o menu, continuaria aberto para escolha de outra opção!. Como é que voce faria isso? Edson
Tipo... vc deve clicar com o botão direito do mouse em cima do botão "sair" daí entra em "events", "action", "actionPerformed" daí o programa vai para os códigos da classe... então, vc deve escrever nesse código mais ou menos o que eu te falei: Janela nova = new Janela(); nova.setVisible(true); setVisible(false); daí no lugar de "Janela", vc coloca o nome da classe para a qual vc deseja retornar :) (=^.^=) Kol (=^.^=)
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

[quote="Marcos Fabris"] até seria uma saída, o problema é que ela vai continuar aberta só que invisível e consumindo memória... Edson vc está usando o JDesktopPane ou abrindo vários JFrames?
hmmm... então como eu poderia fechar essa janela sem gastar memória? :lol: (=^.^=) Kol (=^.^=)
GOSTEI 0
Edson Amorim

Edson Amorim

09/04/2009

Lovely, Acho que entendi... Vou fzer os testes daquí a pouquinho e, retorno aqui... Obrigado mais uma vez, a voce e ao Marcos Fabris... Edson
GOSTEI 0
Marcos

Marcos

09/04/2009

[quote="lovely_kol"][quote="Marcos Fabris"] até seria uma saída, o problema é que ela vai continuar aberta só que invisível e consumindo memória... Edson vc está usando o JDesktopPane ou abrindo vários JFrames?
hmmm... então como eu poderia fechar essa janela sem gastar memória? :lol: (=^.^=) Kol (=^.^=)
dispose(); :wink:
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

[quote="Marcos Fabris"] dispose(); :wink:
Aeww...e funciona mesmo :D Eu estava lendo as outras mensagens deste tópico e consegui usar o dispose(); eu fiz assim ó: no começo da classe eu criei o método fechar: [b]private void fechar(){ this.dispose(); }[/b] depois, dentro do método de ação do botão, eu coloquei: [b]Janela nova = new Janela();[/b] // para abrir a nova janela (Janela é o nome da classe) [b]nova.setVisible(true);[/b] [b]dispose();[/b] // para fechar a janela atual E funcionou :D Muito obrigada :mrgreen: (=^.^=) Kol (=^.^=)
GOSTEI 0
Marcos

Marcos

09/04/2009

[quote="lovely_kol"][quote="Marcos Fabris"] dispose(); :wink:
Aeww...e funciona mesmo :D Eu estava lendo as outras mensagens deste tópico e consegui usar o dispose(); eu fiz assim ó: no começo da classe eu criei o método fechar: [b]private void fechar(){ this.dispose(); }[/b] depois, dentro do método de ação do botão, eu coloquei: [b]Janela nova = new Janela();[/b] // para abrir a nova janela (Janela é o nome da classe) [b]nova.setVisible(true);[/b] [b]dispose();[/b] // para fechar a janela atual E funcionou :D Muito obrigada :mrgreen: (=^.^=) Kol (=^.^=)
isso aí! :evil: agora só falta o edson dizer se conseguiu..
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

Marcos...você entende bastante de java, né?...hehehe Eu ia fazer uma perguntinha (que não tem relação com o tópico)... vc sabe como utilizar a função "Timer"? (=^.^=) Kol (=^.^=)
GOSTEI 0
Marcos

Marcos

09/04/2009

lovely_kol, ve se te ajuda... http://www.javafree.org/javabb/viewtopic.jbb?t=864031
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

dispose(); fecha mas a aplicação continua consumindo memória, se for pra fechar de vez use: System.exit(0);
GOSTEI 0
Mrs Potter

Mrs Potter

09/04/2009

para que nao feche todo o seu sistema quando vc clica no botao ou quando fecha a janela faça isso: 1º selecione o seu fomulário depois vai em propriedades(paleta do nettbeans) na opção: defaultCloseOperation (essa á a primeira propriedade) e muda para DISPOSE. somente isso.. te+
GOSTEI 0
Eliezer Genilhu

Eliezer Genilhu

09/04/2009

private void btnSairActionPerformed(java.awt.event.ActionEvent evt) { frmCadastroCliente cadastrocliente = new frmCadastroCliente(); this.dispose();
GOSTEI 0
POSTAR