Boa tarde, tenho uma pequena aplicação, onde tenho uma opção no menupublic void actionPerformed(ActionEvent e) {
if (e.getSource().equals(menuItemSair)) {
sair();
}
e no main
JFrame janela = new Principal();
// janela.show();
janela.setVisible(true);
WindowListener windowListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
sair();
}
};
janela.addWindowListener(windowListener);
public void sair() {
Object[] options = { "Sim", "Não" };
if (JOptionPane.showOptionDialog(null, "Tem certeza que deseja sair?", "Bolão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]) == JOptionPane.YES_OPTION) {
System.out.println("saindo");
System.exit(-1);
}
}
Ao clicar no menu > sair ele ja a pergunta, se clicar em Não, blz, nada aconcete, mas se clicar no X ele faz a pergunta, clicando em não ele some com aplicação, mas o processo continua rodando.
Alguem sabe o que pode ser?
Talvez eu não tenho sido claro ou não entendi a sugestão.
Quando clicar no “X” o sistema faz a pergunta tudo certinho, o problema é se clicar no “Não”, que não é pra fechar a aplicação.
testa esse código:
if(JOptionPane.showConfirmDialog(null, "Deseja Sair?", "Atenção", JOptionPane.YES_NO_OPTION, 3) == JOptionPane.OK_OPTION){
System.exit(0);
}
O problema está acontecendo por que ele clica no X de fechar a janela, como fazem 99,87% dos usuários.
Neste caso, eu sugiro deixar fechar duma vez…
Isso por que quem reconhece a chamada para fechar é o SO e não a aplicação, primeiramente.
wellington.nogueira como ficaria no exemplo?
[code]package br.com.bolao.main;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
public class MyPanel extends JFrame implements ActionListener {
private JMenuBar menuBar;
private JMenu menuCadastro;
private JMenuItem menuItemCadastro;
private JMenuItem menuItemSair;
public static void main(String[] args) {
JFrame janela = new MyPanel();
janela.setVisible(true);
WindowListener windowListener = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
sair();
}
};
janela.addWindowListener(windowListener);
}
public MyPanel() {
setTitle("Exemplo");
setExtendedState(JFrame.MAXIMIZED_BOTH);
menuBar = new JMenuBar();
menuCadastro = new JMenu("Menu");
menuItemCadastro = new JMenuItem("Cadastro");
menuItemCadastro.addActionListener(this);
// Sair
menuItemSair = new JMenuItem("Sair");
menuItemSair.addActionListener(this);
menuCadastro.add(menuItemCadastro);
menuCadastro.add(menuItemSair);
menuBar.add(menuCadastro);
setJMenuBar(menuBar);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(menuItemCadastro)) {
JOptionPane.showMessageDialog(null, "Menu cadastro");
}
if (e.getSource().equals(menuItemSair)) {
sair();
}
}
public static void sair() {
Object[] options = { "Sim", "Não" };
if (JOptionPane.showOptionDialog(null, "Tem certeza que deseja sair?", "Bolão", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]) == JOptionPane.YES_OPTION) {
System.out.println("saindo");
System.exit(-1);
}
}
}
[/code]
JonaTHANNM não rolou, fica a mesma coisa
mas vc quer que quando o usuário clique no X ele feche o sistema também?
Se a pessoa clicar em “Sim”, sim deve fechar o sistema, caso contrário o sistema deve permanecer aberto.
[quote=drsmachado]O problema está acontecendo por que ele clica no X de fechar a janela, como fazem 99,87% dos usuários.
Neste caso, eu sugiro deixar fechar duma vez…
Isso por que quem reconhece a chamada para fechar é o SO e não a aplicação, primeiramente.[/quote]
O eclipse tem uma opção de mostrar mensagem se realmente quer fechar a IDE, o que acho extremamente util, pois muitas vezes fechei sem querer, ao fechar outras coisas.
coloca isso que vai resolver o seu problema:
JFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
[quote=JonaTHANNM]coloca isso que vai resolver o seu problema:
JFrame.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
[/quote]
fecho, vlw