Codigo para o botão Sair, fechando só o formulario
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:
Atenciosamente,
Edson
c.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
Edson Amorim
Curtidas 0
Respostas
Juan Damasceno
09/04/2009
Use o método dispose() do seu formulário.
GOSTEI 0
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
09/04/2009
Pessoal eu faria da seguinte forma...
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 ;)
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();
}
}
GOSTEI 0
Henrique Freitas
09/04/2009
Sempre uso o metodo dispose(); O setvisible(false) somente deixa invisivel, nao o fecha!
GOSTEI 0
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:
Atenciosamente,
Edson
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);
}
}
GOSTEI 0
Marcos
09/04/2009
[quote="Amamorim"]
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();
;)
//c.addActionListener(new ActionListener() {
// public void actionPerformed(ActionEvent e){
// System.exit(0);
// }
// });
GOSTEI 0
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
09/04/2009
[quote="Amamorim"]
Edson , comenta a linha igual acima e tenta novamente...
public static void main(String[] args) {
Relatorio1 app = new Relatorio1();
//app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
GOSTEI 0
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
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
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
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
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
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
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
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
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 (=^.^=) GOSTEI 0
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
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 (=^.^=) GOSTEI 0
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
09/04/2009
lovely_kol, ve se te ajuda...
http://www.javafree.org/javabb/viewtopic.jbb?t=864031
GOSTEI 0
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
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
09/04/2009
private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {
frmCadastroCliente cadastrocliente = new frmCadastroCliente();
this.dispose();
GOSTEI 0