Pessoal,
Estava com problemas no entendimento de Eventos, mas agora estou entendendo melhor. Fiz uma pergunta e coloquei no WindowEvent para ela aparecer toda hora quando eu clicar no “X” do programa e funcionou.
Agora eu gostaria que essa pergunta só seja feita quando eu clicar no botão de processar o programa e se eu for fechar o programa no “X” aparecer a pergunta se deseja fechar o programa.
Alguém poderia me ajudar ? Onde eu devo colocar a pergunta e como eu devo fazer.
Segue abaixo o código que eu fiz:
int opcao = JOptionPane.showOptionDialog(null,
"Deseja fechar o Programa?", "PERGUNTA",
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
null, null, null);
if (opcao == 0) {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} else {
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
}
… Preciso de uma condição entre essa pergunta e saber onde eu a coloco…
[code]publi class classeWindowListener extends WindowAdapter{
public void windowClosing( WindowEvent e ){
int opcao= JOptionPane.showOptionDialog(null,
“Deseja fechar o Programa?”, “PERGUNTA”,
JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE,
null, null, null);
Tenho como saber como o usuário esta fechando a minha aplicação?
Tipo assim, se ele clicou no “X”, ou se ele deu “alt+f4”, ou se ele tah tentando finalizar o SO??
Quando uma janela é fechada ela chama o metodo windowClosing() do WindowsListener dela, n importa se ela é fechada pela “X” ou por “Alt+F4”.
Nunca testei finalizar o SO, mas acho q tb chama, porem vc n pode impedir q o SO se deslique, acho q vai chamar o método e depois encerrar o programa na marra se ainda estiver aberto, mas isso é só especulação!
Quando eu utilizava o VB (muito tempo atras) ele tinha estas opcoes, e dava pra controlar, pelo menos no windows, e queria saber se no java tambem dava.
Daniel,
Testei o código e o programa não fechava de jeito nenhum quando eu clicava no “X”. E quando eu comecei a processar o programa ele não chamou a pergunta.
Coloquei o setDefault na janela principal e o código eu coloquei no windowClosing do construtor da minha tela. Eu não criei uma outra classe.
O que será que deu errado ?
O que eu queria era que essa pergunta aparecesse quando eu já tivesse clicado no botão de Processar, pelo que eu sei o evento do botão é ActionListener - actionPerformed.
Tem alguma ajuda para este caso ? Ou será que eu fiz alguma coisa errada no seu código, coloquei em lugar errado …
[quote]Coloquei o setDefault na janela principal e o código eu coloquei no windowClosing do construtor da minha tela. Eu não criei uma outra classe.
O que será que deu errado ?
[/quote]
tente assim:
addWindowListener(
new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
}
);
Desta forma quando o usuario clicar no “x” do aplicativo o aplicativo se encerrara.
import javax.swing.*;
import java.awt.event.*;
public class Teste extends JFrame{
public Teste(){
setBounds(100,100,600,400);
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowListener());
show();
}
public static void main(String[] args){
Teste app= new Teste();
}
public class WindowListener extends WindowAdapter{
public void windowClosing(WindowEvent e){
int opcao= JOptionPane.showOptionDialog(null,
"Deseja fechar o Programa?", "PERGUNTA",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null, null, null);
if (opcao == 0) {
System.exit(0);
}
}
}
}
Pessoal, consegui terminar a pergunta!
Eu criei a classe windowClosing no programa principal com a pergunta; na outra Thread do meu programa eu criei uma variável int chamada “flag” e no run() eu seto esta variável como 1; na classe windowClosing do programa principal eu verifico com um if se a variável esta com o valor 1, se estiver ele faz a pergunta, senão ele fecha o programa.