Tenho uma JDialog (2ª tela do programa) que tem um botão para fechá-la. Qual seria o evento que tenho que associar ao botão?
Já tentei:
System.exit(0);
e
minhaJanela.setDefaultClosedAction(JFrame.EXIT_ON_CLOSE);
Muito obrigado.
Tenho uma JDialog (2ª tela do programa) que tem um botão para fechá-la. Qual seria o evento que tenho que associar ao botão?
Já tentei:
System.exit(0);
e
minhaJanela.setDefaultClosedAction(JFrame.EXIT_ON_CLOSE);
Muito obrigado.
Olá tudo bem…
se vc quiser que feche somente a janela, que esta aberta, e não o programa inteiro, vc poder fazer assim:
this.hide();
ou System.exit(0); para fechar o sistema inteiro…
FLW…
Abraços…
Se quer fechar a JDialog, pode usar:
setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
Assim quando clicar no botão fechar a caixa de diálogo será fechada.
Fabio e eros.stein, eu tentei dos dois jeitos que vocês falaram, mas não funcionaram também. Vou por o código aki embaixo para que vocês possam entender melhor.
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class tela_01 extends JDialog implements ActionListener {
public JLabel lbl_pessoa, lbl_palestra;
public JButton bt_visualiza, bt_cancela;
public JComboBox txt_pessoa, txt_palestra;
public void t_01() {
tela_01 emitirCert = new tela_01();
emitirCert.setTitle("Digitar dados");
emitirCert.setSize(300,300);
emitirCert.setResizable(false);
emitirCert.setModal(true);
emitirCert.alignCenter();
emitirCert.getContentPane().setLayout(null);
lbl_pessoa = new JLabel("Nome participante:");
lbl_pessoa.setBounds(10,10,120,20);
emitirCert.getContentPane().add(lbl_pessoa);
lbl_palestra = new JLabel("Nome palestra:");
lbl_palestra.setBounds(10,70,120,20);
emitirCert.getContentPane().add(lbl_palestra);
txt_pessoa = new JComboBox();
txt_pessoa.setBounds(10,40,200,20);
txt_pessoa.setEditable(true);
emitirCert.getContentPane().add(txt_pessoa);
txt_palestra = new JComboBox();
txt_palestra.setBounds(10,100,200,20);
txt_palestra.setEditable(true);
emitirCert.getContentPane().add(txt_palestra);
bt_visualiza = new JButton("Visualizar");
bt_visualiza.setBounds(15,130,120,20);
bt_visualiza.setEnabled(true);
emitirCert.getContentPane().add(bt_visualiza);
bt_cancela = new JButton("Cancelar");
bt_cancela.setBounds(150,130,120,20);
bt_cancela.setEnabled(true);
bt_cancela.addActionListener(this);
emitirCert.getContentPane().add(bt_cancela);
emitirCert.setVisible(true);
}
public void alignCenter() {
Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
Dimension j = getSize();
setLocation((t.width-j.width)/2,(t.height-j.height)/2);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == bt_cancela) {
setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
/*this.hide();*/
}
}
}
O código da janel aprincipal que chama está no link abaixo:
http://www.guj.com.br/posts/list/69512.java
Obrigado pela ajuda prestada até o momento. Até mais!
Amigo, use:
this.dispose();
E o setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
é pra ser usado de outra forma:
seu_JDialog.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
e isso no método de criação, não no recebimento do evento.
No recebimento do evento pode ainda colocar setVisible(false);
Poste se conseguir.
Abraço.
Obrigado pela ajuda eros.stein e reanaFA, mas não funcionou ou eu coloquei o comando no local errado. Eu sei que já devo estar enchendo vocês, mas ainda preciso de ajuda. Não sei se fui claro, mas eu quero quero que a minha JDialog feche por um botão “Cancela” criado por mim, não pelo “X” da janela. Segue a baixo o código com as mudanças já tentadas.
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class tela_01 extends JDialog implements ActionListener {
public JLabel lbl_pessoa, lbl_palestra;
public JButton bt_visualiza, bt_cancela;
public JComboBox txt_pessoa, txt_palestra;
public void t_01() {
tela_01 emitirCert = new tela_01();
emitirCert.setTitle("Digitar dados");
emitirCert.setSize(300,300);
emitirCert.setResizable(false);
emitirCert.setModal(true);
emitirCert.alignCenter();
emitirCert.getContentPane().setLayout(null);
lbl_pessoa = new JLabel("Nome participante:");
lbl_pessoa.setBounds(10,10,120,20);
emitirCert.getContentPane().add(lbl_pessoa);
lbl_palestra = new JLabel("Nome palestra:");
lbl_palestra.setBounds(10,70,120,20);
emitirCert.getContentPane().add(lbl_palestra);
txt_pessoa = new JComboBox();
txt_pessoa.setBounds(10,40,200,20);
txt_pessoa.setEditable(true);
emitirCert.getContentPane().add(txt_pessoa);
txt_palestra = new JComboBox();
txt_palestra.setBounds(10,100,200,20);
txt_palestra.setEditable(true);
emitirCert.getContentPane().add(txt_palestra);
bt_visualiza = new JButton("Visualizar");
bt_visualiza.setBounds(15,130,120,20);
bt_visualiza.setEnabled(true);
emitirCert.getContentPane().add(bt_visualiza);
bt_cancela = new JButton("Cancelar");
bt_cancela.setBounds(150,130,120,20);
bt_cancela.setEnabled(true);
bt_cancela.addActionListener(this);
emitirCert.getContentPane().add(bt_cancela);
emitirCert.setVisible(true);
emitirCert.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);
}
public void alignCenter() {
Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
Dimension j = getSize();
setLocation((t.width-j.width)/2,(t.height-j.height)/2);
}
public void actionPerformed(ActionEvent e) {
if(e.getSource() == bt_cancela) {
setVisible(false);
this.dispose();
this.hide();
}
}
}
Obrigado de novo.
Amigo, coloque apenas isso:
public void actionPerformed(ActionEvent e) {
if(e.getSource() == bt_cancela) {
this.dispose();
}
}
Se por acaso quiser DESABILITAR tb a função do X do JDialog, para que só seja possível sair clicando no seu botão, coloque tb. esse código:
public void t_01() {
tela_01 emitirCert = new tela_01();
setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
// segue o resto do seu código normalmente
Boa sorte! :wink:
Um outro modo seria assim…
Na linha 50:
bt_cancela.addActionListener(this);
substitua por:
bt_cancela.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
setVisible(false);
}
});
Caramba, esse programa deve estar “zicado”. Tentei as soluções apresentadas por vocês, mas não funcionaram. Só a de desabilitar a o “X” da janela funcionou. Se alguém conseguir fazer funcionar, por favor poste o código aqui. O brigado pela ajuda até o momento.
Desculpe, esqueci de um detalhe. Aqui: setVisible(false);
coloque:
nome_do_seu_JDialog.setVisible(false);
Ok?
Agora deve funcionar.
Eu realizei a mudança eros.stein, mas não funcionou também. Segue o código.
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class tela_01 extends JDialog implements ActionListener{
public JLabel lbl_pessoa, lbl_palestra;
public JButton bt_visualiza, bt_cancela;
public JComboBox cmb_pessoa, cmb_palestra;
public JTextField txt_pessoa;
String[] Cores[]= {null};
public void t_01() {
tela_01 emitirCert = new tela_01();
emitirCert.setTitle("Digitar dados");
emitirCert.setSize(300,300);
emitirCert.setResizable(false);
emitirCert.setModal(true);
emitirCert.alignCenter();
emitirCert.getContentPane().setLayout(null);
lbl_pessoa = new JLabel("Nome participante:");
lbl_pessoa.setBounds(10,10,120,20);
emitirCert.getContentPane().add(lbl_pessoa);
lbl_palestra = new JLabel("Nome palestra:");
lbl_palestra.setBounds(10,70,120,20);
emitirCert.getContentPane().add(lbl_palestra);
txt_pessoa = new JTextField();
txt_pessoa.setBounds(10,160,200,20);
txt_pessoa.setEditable(true);
emitirCert.getContentPane().add(txt_pessoa);
cmb_pessoa = new JComboBox();
cmb_pessoa.setBounds(10,40,200,20);
cmb_pessoa.setEditable(true);
emitirCert.getContentPane().add(cmb_pessoa);
cmb_palestra = new JComboBox(Cores);
cmb_palestra.setBounds(10,100,200,20);
cmb_palestra.setEditable(true);
getContentPane().add(new JLabel("Cores"));
emitirCert.getContentPane().add(cmb_palestra);
bt_visualiza = new JButton("Visualizar");
bt_visualiza.setBounds(15,130,120,20);
bt_visualiza.setEnabled(true);
emitirCert.getContentPane().add(bt_visualiza);
/*bt_visualiza.addActionListener(this);*/
bt_cancela = new JButton("Cancelar");
bt_cancela.setBounds(165,130,120,20);
bt_cancela.setEnabled(true);
emitirCert.getContentPane().add(bt_cancela);
bt_cancela.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
emitirCert.setVisible(false);
}
});
/*bt_cancela.addActionListener(this);*/
/*Desabilita o X da janela
* emitirCert.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);*/
emitirCert.setVisible(true);
}
public void alignCenter() {
Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
Dimension j = getSize();
setLocation((t.width-j.width)/2,(t.height-j.height)/2);
}
}
obs.: onde está
emitirCert.setVisible(false);
eu tembém já tentei as classes t_01 e tela_01.
Obrigado de novo.
Olha, acabei de testar seu código, e aqui funcionou. Confira:
Meu teste:
/*
* JDialogTest.java
*
* Created on 21 de Setembro de 2007, 02:01
*
*/
package jdialogtest;
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* @author Eros Stein
*/
public class JDialogTest extends JDialog {
public JLabel lbl_pessoa, lbl_palestra;
public JButton bt_visualiza, bt_cancela;
public JComboBox cmb_pessoa, cmb_palestra;
public JTextField txt_pessoa;
String[] Cores[]= {null};
/** Creates a new instance of JDialogTest */
public JDialogTest() {
}
public void t_01() {
final JDialogTest dialog = new JDialogTest();
dialog.setTitle("Digitar dados");
dialog.setSize(300,300);
dialog.setResizable(false);
dialog.alignCenter();
dialog.setModal(true);
dialog.getContentPane().setLayout(null);
lbl_pessoa = new JLabel("Nome participante:");
lbl_pessoa.setBounds(10,10,120,20);
dialog.getContentPane().add(lbl_pessoa);
lbl_palestra = new JLabel("Nome palestra:");
lbl_palestra.setBounds(10,70,120,20);
dialog.getContentPane().add(lbl_palestra);
txt_pessoa = new JTextField();
txt_pessoa.setBounds(10,160,200,20);
txt_pessoa.setEditable(true);
dialog.getContentPane().add(txt_pessoa);
cmb_pessoa = new JComboBox();
cmb_pessoa.setBounds(10,40,200,20);
cmb_pessoa.setEditable(true);
dialog.getContentPane().add(cmb_pessoa);
cmb_palestra = new JComboBox(Cores);
cmb_palestra.setBounds(10,100,200,20);
cmb_palestra.setEditable(true);
getContentPane().add(new JLabel("Cores"));
dialog.getContentPane().add(cmb_palestra);
bt_visualiza = new JButton("Visualizar");
bt_visualiza.setBounds(15,130,120,20);
bt_visualiza.setEnabled(true);
dialog.getContentPane().add(bt_visualiza);
/*bt_visualiza.addActionListener(this);*/
bt_cancela = new JButton("Cancelar");
bt_cancela.setBounds(165,130,120,20);
bt_cancela.setEnabled(true);
dialog.getContentPane().add(bt_cancela);
bt_cancela.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
dialog.setVisible(false);
}
});
dialog.setVisible(true);
}
public void alignCenter() {
Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
Dimension j = getSize();
setLocation((t.width-j.width)/2,(t.height-j.height)/2);
}
}
Código do Main:
/*
* Main.java
*
* Created on 21 de Setembro de 2007, 02:00
*/
package jdialogtest;
/**
*
* @author Eros Stein
*/
public class Main {
/** Creates a new instance of Main */
public Main() {
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JDialogTest tela = new JDialogTest();
tela.t_01();
}
}
Confira aí, pois aqui este código funcionou, a janela sumiu normalmente.
Compare o seu código com o meu e faça as alterações. Rode meu teste para confirmar ver que está funcionando.
Espero que agora consiga, abraços.
Muito obrigado eros.stein. E não é que funcionou??? agora vou ver se eu acho o que eu estava fazendo de errado. Valeu mesmo. Até mais.
tela funcionando
import javax.swing.JDialog;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class tela_01 extends JDialog {
public JLabel lbl_pessoa, lbl_palestra;
public JButton bt_visualiza, bt_cancela;
public JComboBox cmb_pessoa, cmb_palestra;
/*public JTextField txt_pessoa;*/
String[] Cores[]= {null};
public tela_01() {
}
public void t_01() {
final tela_01 emitirCert = new tela_01();
emitirCert.setTitle("Digitar dados");
emitirCert.setSize(300,300);
emitirCert.setResizable(false);
emitirCert.setModal(true);
emitirCert.alignCenter();
emitirCert.getContentPane().setLayout(null);
lbl_pessoa = new JLabel("Nome participante:");
lbl_pessoa.setBounds(10,10,120,20);
emitirCert.getContentPane().add(lbl_pessoa);
lbl_palestra = new JLabel("Nome palestra:");
lbl_palestra.setBounds(10,70,120,20);
emitirCert.getContentPane().add(lbl_palestra);
/*txt_pessoa = new JTextField();
txt_pessoa.setBounds(10,160,200,20);
txt_pessoa.setEditable(true);
emitirCert.getContentPane().add(txt_pessoa);*/
cmb_pessoa = new JComboBox();
cmb_pessoa.setBounds(10,40,200,20);
cmb_pessoa.setEditable(true);
emitirCert.getContentPane().add(cmb_pessoa);
cmb_palestra = new JComboBox(Cores);
cmb_palestra.setBounds(10,100,200,20);
cmb_palestra.setEditable(true);
getContentPane().add(new JLabel("Cores"));
emitirCert.getContentPane().add(cmb_palestra);
bt_visualiza = new JButton("Visualizar");
bt_visualiza.setBounds(15,130,120,20);
bt_visualiza.setEnabled(true);
emitirCert.getContentPane().add(bt_visualiza);
/*bt_visualiza.addActionListener(this);*/
bt_cancela = new JButton("Cancelar");
bt_cancela.setBounds(165,130,120,20);
bt_cancela.setEnabled(true);
emitirCert.getContentPane().add(bt_cancela);
bt_cancela.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
emitirCert.setVisible(false);
}
}
);
/*bt_cancela.addActionListener(this);*/
/*Desabilita o X da janela
* emitirCert.setDefaultCloseOperation(JDialog.EXIT_ON_CLOSE);*/
emitirCert.setVisible(true);
}
public void alignCenter() {
Dimension t = Toolkit.getDefaultToolkit().getScreenSize();
Dimension j = getSize();
setLocation((t.width-j.width)/2,(t.height-j.height)/2);
}
}
Gente, só cuidado com uma coisinha…
Qdo vc usa .setVisible(false) vc está deixando o JDialog invisível, mas ele ainda existe! Ou seja, ele ainda está ocupando memória, etc, etc… Quando vc usa .dispose() vc “mata” ele… Entendem?
Por isso, veja bem qual é o uso no seu caso…
ERRO
OBS: Me desculpem! Não sei oque tem acontecido com o GUJ. Eu mando enviar uma resposta, ele demora pacas, dá erro de proxy e qdo volto na página o post foi duplicado… 
ERRO
Muito obrigado pela dica renataFA. Eu tinha meio que ficado na dúvida mesmo se quando você usa o setVisible ele finaliza ou apenas “esconde” a janela. Eu usei o dipose no código e funcionou. Acho que o problema era quando eu relacionava o evento ao botão, porque eu tinha tentado antes mas não consegui. Depois que o eros.stein me deu umas dicas, funcionou com o setVisible, e agora com a sua ajuda funcionou com o dispose. Obrigado.