Confirmar o fechamento do JFrame

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.

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

Tente isso:

[code]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();
}

}
[/code]

Bem bolado o codigo, hheheheh

Uma coisa meio off topic.

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

VELO

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

2 curtidas

[quote=velo]Bem bolado o codigo, hheheheh

Uma coisa meio off topic.

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

VELO[/quote]

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:

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