Confirmar o fechamento do JFrame

6 respostas
H

Gostaria de uma dica para implementar uma tela de confirmação estilo “Tem certeza que deseja sair? S/N” quando o usuário solicita o fechamento de um JFrame ou JDialog.

6 Respostas

L

adicione um WindowListener e implemente o metodo windowClosing(…)

Mais detalhes:

WindowListener http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/WindowListener.html

V

Tente isso:

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;


/**
 * @author volnei

 */
public class Test2 extends JFrame{

	
	public Test2() {
		setVisible(true);
		setSize(300, 300);
		setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e) {
				int i = JOptionPane.showConfirmDialog(null ,"Tem certeza que deseja sair?", "Saída",JOptionPane.YES_NO_OPTION);
				if (i == JOptionPane.YES_OPTION) {
					System.exit(0);
				} else {
					repaint();
				}
			}
		});
	}
	
	
	public static void main(String[] args) {
		new Test2();
	}
}
V

Bem bolado o codigo, hheheheh

Uma coisa meio off topic.

Como o JOptionPane faz pra se auto-centralizar na tela?

VELO

V

Sou uma ideia para muda a confirmação de saida de yes/no para sim/não.

Object[] options = { "Sim", "Não" };
		int i = JOptionPane.showOptionDialog(null,
				"Tem certeza que deseja sair?", "Saída",
				JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null,
				options, options[0]);
		if (i == JOptionPane.YES_OPTION) {
			System.exit(0);
		}

Fica mais verde amarelo assim.

VELO

W

velo:
Bem bolado o codigo, hheheheh

Uma coisa meio off topic.

Como o JOptionPane faz pra se auto-centralizar na tela?

VELO

eh soh vc usar o toolkit e pegar o tamanho da tela, exemplo de janela centralizada:

import java.awt.*;
import javax.swing.*;

public class JanelaCentro extends JFrame {
  public JanelaCentro() {
    Toolkit tk = Toolkit.getDefaultToolkit(); //pegar o toolkit padrado do SO
    int width = 500; //exemplo de tamanho de largura do frame
    int height = 400; //exemplo de tamanho de altura do frame
    int px = tk.getScreenSize().width / 2 - width / 2; //criando posicao X
    int py = tk.getScreenSize().height / 2 - height / 2; //posicao Y

    setBounds(px, py, width, height); //definindo posicao e tamanho do frame
    setTitle("janela centralizada");
  }

  public static void main(String[] args) {
    new JanelaCentro().setVisible(true);
  }
}

bem facil neh :wink:

V

Na verdade vc pode dar um setRelativeTo() e passar o Frame q vc tem para ser o centro, ou passar null pra ficar no centro da tela.

VELO

Criado 17 de dezembro de 2004
Ultima resposta 22 de abr. de 2005
Respostas 6
Participantes 5