O Frame nao respeito o sim e nao para cancelar e fecha de qualquer modo!

2 respostas
phzao

Ola,

Estou com um problema na hora de fechar o Frame, eu questiono o usuario se deseja realmente fechar o frame e independente da resposta ele fecha…Eu estou querendo que ele cancele o fechamento…

O codigo esta abaixo, soh copiar e compila:

package controle;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EtchedBorder;
import javax.swing.border.LineBorder;


/**
 * @author Paulo Henrique
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class ControlePrincipal extends JFrame {

	public ControlePrincipal(){
		
		TextoAjuda = "INICIO";
		menu = new JMenuBar();
		MenuUsuario = new JMenu();
		MenuCliente = new JMenu();
		MenuProduto = new JMenu();
		PainelStatus = new JPanel();//painel de status
		PainelDescricao = new Descritor(TextoAjuda);
		PainelDesktop = new JPanel();//painel onde ficara o desktop
		PainelEsquerda = new JPanel();//Painel onde ficara o atalho da esquerda
		PainelDireita = new JPanel();
		UsuarioLogado = new JLabel();
		HoraAtual = new JLabel();
		Desk = new JDesktopPane();
		
		String Titulo = "SCC - Sistema de Controle de Caixa"
			+"versão 1.0 - Registrado para:"
			+" ANDREA AVIAMENTOS";
		getContentPane().setLayout(new BorderLayout());//setando o layout do frame
		
		setTitle(Titulo);//setando titulo
		setPreferredSize(new Dimension(FrameLargura,FrameAltura));//definindo o tamanho
		setResizable(false);//nao permitindo mudanca no tamanho do frame
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent evt){
				String ConfirmaSaida = " CONFIRMAR SAIDA ? ";
				String TituloPane = "CONFIRMAÇÃO DE SAIDA";
				Object[] options={"SIM","NAO"};
				int i = JOptionPane.showOptionDialog(null,
						ConfirmaSaida,TituloPane,JOptionPane.YES_NO_OPTION,
						JOptionPane.QUESTION_MESSAGE,null,options,options[0]);
				//JOptionPane.showMessageDialog(null,"VALOR:"+i,"T",JOptionPane.INFORMATION_MESSAGE);
		        if(i==0)
		            System.exit(0);
		        else{
		        	JOptionPane.showMessageDialog(null,"VOLTANDO AO PROGRAMA","RETORNO",JOptionPane.INFORMATION_MESSAGE);
		        	//repaint();		        	tentei isso mas nao funcionou
		        }
			}
		});
		
		PainelStatus.setLayout(new FlowLayout());//setando o layout para a barra de status
		PainelStatus.setBorder(new EtchedBorder());//adicionando borda a barra de status
		UsuarioLogado.setText("USUARIO");//setando texto do componente
		HoraAtual.setText("HORA");//setando texto do componente
		PainelStatus.add(UsuarioLogado);//adicionando componente
		PainelStatus.add(HoraAtual);//adicionando componente
		
		PainelDesktop.setLayout(new BorderLayout());
		PainelDesktop.setPreferredSize(new Dimension(DeskLargura,DeskAltura));
		Desk.setPreferredSize(new Dimension(DeskLargura,DeskAltura));
		
		PainelDireita.setPreferredSize(new Dimension(PainelLateralLargura,PainelLateralAltura));
		PainelDireita.setBorder(new LineBorder(new Color(20)));//setando borda para painel da direita
		PainelEsquerda.setPreferredSize(new Dimension(PainelLateralLargura,PainelLateralAltura));
		PainelEsquerda.setBorder(new LineBorder(new Color(5)));//setando borda para painel da esquerda
		PainelDescricao.setPreferredSize(new Dimension(DeskLargura,60));
		PainelDescricao.setBorder(new LineBorder(new Color(10)));
		
		PainelDesktop.add(Desk,BorderLayout.CENTER);//adicionando DesktopPane ao Painel
		PainelDesktop.add(PainelDescricao,BorderLayout.SOUTH);
		getContentPane().add(PainelDesktop,BorderLayout.CENTER);
		getContentPane().add(PainelStatus,BorderLayout.SOUTH);
		getContentPane().add(PainelEsquerda,BorderLayout.WEST);
		getContentPane().add(PainelDireita,BorderLayout.EAST);
		
		MenuUsuario.setText("USUARIO");
		MenuCliente.setText("CLIENTE");
		MenuProduto.setText("PRODUTO");
		menu.add(MenuUsuario);
		menu.add(MenuCliente);
		menu.add(MenuProduto);
		
		setJMenuBar(menu);
		
		pack();
	}


	public void formWindowClosing(WindowEvent evt){
		
        
	}
	
	public static void main(String[] args){
		
		new ControlePrincipal().setVisible(true);
	}

	private static final int FrameAltura = 715;//mudar para 800 quando concluir
	private static final int FrameLargura = 1025;
	private static final int DeskAltura = 550;
	private static final int DeskLargura = 855;
	private static final int EsquerdaLargura = 100;
	private static final int EsquerdaAltura = 200;
	private static final int PainelLateralLargura=80;
	private static final int PainelLateralAltura=200;
	private String TextoAjuda;
	private JMenuBar menu;
	private JMenu MenuUsuario;
	private JMenu MenuProduto;
	private JMenu MenuCliente;
	private JPanel PainelDesktop;
	private JPanel PainelStatus;
	private JPanel PainelEsquerda;
	private JPanel PainelDireita;
	private Descritor PainelDescricao;
	private JLabel UsuarioLogado;
	private JLabel HoraAtual;
	private JDesktopPane Desk;
}

2 Respostas

keller

Você tem que setar a operacao quando clicado no fechar…
Senao o default é EXIT_ON_CLOSE.

if(i == 0){
    setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}else{
    setDefaultCloseOperation( JFrame.DO_NOTHING_ON_CLOSE );
}

valeu? até… :thumbup:
[]'s

Spool

phzao:
private static final int FrameAltura = 715;//mudar para 800 quando concluir private static final int FrameLargura = 1025; private static final int DeskAltura = 550; private static final int DeskLargura = 855; private static final int EsquerdaLargura = 100; private static final int EsquerdaAltura = 200; private static final int PainelLateralLargura=80; private static final int PainelLateralAltura=200;

Só uma dica:

Procure aderir a convenção utilizada para declaração de CONSTANTES.

Um exemplo baseado no seu codigo:

private static final int PAINEL_LATERAL_ALTURA = 200;

Isso torna bem mais facil a identificação do que vc esta fazendo.

Abraços.

Criado 5 de agosto de 2005
Ultima resposta 31 de mai. de 2006
Respostas 2
Participantes 3