Sair com a tecla "ESC"

6 respostas
F

Gostaria de saber como eu faço para quando apertar a tecla “ESC” fechar a janela

6 Respostas

K

Você precisa adicionar um keyListener a seu Componente.

:arrow: http://www.javaalmanac.com/egs/java.awt.event/KeyEvents.html

No evento basta executar o doDefaultClosedAction(); ou dispose();
valeu? até… :thumbup:

R

Já teve uma pergunta pareceida aqui no fórum esse mês, só que não sei exatamente onde está o tópico. Tudo bem, não tem problema.
O que o GUI falou está perfeito, mais vai aí um jeito simples.

Faça o seguinte:

public class teclaESC extends JFrame implements KeyListener
{
	//No construtor defina que o componente está escutando
                //algo do teclado
                public teclaESC()
	{
		super("ESC - EXEMPLO");
		this.addKeyListener(this);
                }
	public void keyTyped(KeyEvent ke){}
	public void keyPressed(KeyEvent ke){}
	public void keyReleased(KeyEvent ke)
	{
		if ( ke.getKeyCode() == KeyEvent.VK_ESCAPE )
			System.exit(0);
	}
}

Ok, Valeu galera.
Abraços :slight_smile:

H

Olá, para você não precisar fazer uma adição de listeners em todos os frames, basta criar um tema ou mesmo um look and feel e setar os keybindings e keymaps apropriados.

[]´s

F

Não consegui fazer dessa forma, e além disso o action performed do meu JFrame também não está funcionando creio que há uma relação entre os dois problemas. O JFrame não está escutando os eventos.

public class Login extends JFrame implements ActionListener, KeyListener{
public Login
{
 	super("ESC - EXEMPLO");
 	this.addKeyListener(this);
}

public void keyPressed(KeyEvent e) {}

public void keyTyped(KeyEvent e){}

public void keyReleased(KeyEvent e) 
{
	if (e.getKeyCode() == KeyEvent.VK_ESCAPE )
		quit();	
}

public void actionPerformed(ActionEvent e) 
{
	if(e.getSource() == btnOk)
	{
		entrar();
	}	
	else if(e.getSource() == btnCancel)
	{
		quit();
	}
}
}
R

Poxa, tb está errado, ele não escuta o ActionListener, pq não tem nada que esteja escutando, só tem o KEYLISTENER.
Pelo que percebi tem dois botões.
Então faça o seguinte:

btnOk.addActionListener(this);
btnCancel.addActionListener(this);

E está faltando a implementação dos métodos quit(), entrar().
Está faltando a criação dos botões, do painel ou container.

Se precisar de mais ajuda, coloque o código completo para nós termos noção do que realmente está acontecendo e assim poderemos te ajudar com mais clareza.

Abraços 8)

F
import java.awt.*;
import java.awt.event.*;
import java.net.URL;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import javax.swing.*;
import javax.swing.text.MaskFormatter;
import java.util.Date;
import IO.*;
import Sistema.Funcoes;
import Sistema.Validacoes;

public class Login extends JFrame implements ActionListener, KeyListener
{
    Color color = new Color(29,140,194);	
    Container c;
    
    static Date data=new Date();    
    static int resolucaoHeight=600, resolucaoWidth=800;
    static JMenuBar menuBar;
    static JDesktopPane desktop = new JDesktopPane();
    static Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        
    panelLogin pnlLogin=new panelLogin();
    JTextField txtNumero;
    JPasswordField txtSenha;
    JComboBox cboNome;
    JButton btnOk, btnCancel;
    JLabel lblData,lblUsuario,lblSenha;
    JFormattedTextField txtData;
    
    static int usuNumero;
    static String usuSenha, usuNome;
        
    public Login() 
    {
        super("Título");
		
        if ((screenSize.getWidth()<800)||(screenSize.getHeight()<600))
        {
        	JOptionPane.showMessageDialog(null,"Resolução mínima requerida: 800x600","Lion",1);
        	System.out.println("Resolução mínima requerida: 800x600");
        	dispose();
        	System.exit(0);
        }
        
        setBounds ((((screenSize.width)/2)-(resolucaoWidth/2)), (((screenSize.height)/2)-(resolucaoHeight/2)), 800, 600);
		
		buildContent();
		buildTela();
		
		//this.addKeyListener(this);
		//this.actionPerformed(this);
		
		this.setResizable(false);
		this.addWindowListener(new WindowAdapter() 
				{public void windowClosing(WindowEvent e) 
					{quit();}});
				
		this.getRootPane().getInputMap(panelLogin.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "fecharJanela");
	    this.getRootPane().getActionMap().put("fecharJanela", new AbstractAction("fecharJanela") 
    		{public void actionPerformed(ActionEvent evt) 
	    		{
	    			quit();
	            }
    		});
		
		System.out.println("Iniciando Tela de Login");
		show();
		
		limparTela();
		
//		Faz a conecção
		Banco.getConnection();
	}
	
    protected void buildContent() 
    {  
        getContentPane().add(desktop);
        desktop.setBackground(color);
    }

    protected void buildTela()
    {
    	txtNumero=new JTextField("");
    	txtSenha=new JPasswordField("");
    	cboNome=new JComboBox();
    	btnOk=new JButton("Ok");
    	btnCancel=new JButton("Cancelar");
    	lblData=new JLabel("Data");
    	lblSenha=new JLabel("Senha");
    	lblUsuario=new JLabel("Usuário");
    	
	try 
	{
		MaskFormatter mascara = new MaskFormatter("##/##/####");
		txtData=new JFormattedTextField(mascara);
	} 
	catch (ParseException e) 
	{System.out.println(e);}
		    	
    	//Label
    	
    	lblData.setBounds(290,300,100,20);
    	getContentPane().add(lblData);
    	
    	lblSenha.setBounds(290,350,100,20);
    	getContentPane().add(lblSenha);
    	
    	lblUsuario.setBounds(290,325,100,20);
    	getContentPane().add(lblUsuario);
    	
    	//Textfield e PasswordField
    	
		txtData.setBounds(340,300,70,20);
    	getContentPane().add(txtData);
    	Validacoes.validaData(txtData,lblData.getText());
    	
    	txtNumero.setBounds(340,325,50,20);
    	txtNumero.setHorizontalAlignment(SwingConstants.RIGHT);
    	getContentPane().add(txtNumero);
    	txtNumero.addKeyListener(new KeyListener() { 
			public void keyPressed(KeyEvent e) { 
				if (e.getKeyCode() == (KeyEvent.VK_ENTER)) {
					if (txtNumero.getText().equals("")==true)
					{
						txtNumero.nextFocus();
					}
					else
					{
						if (buscaFuncionario()==true)
						{txtSenha.requestFocus();}
						else{limparTela();}
					}
				}
			} 
			public void keyReleased(KeyEvent e) {} 
			public void keyTyped(KeyEvent e) {
				//e.setKeyChar(e.toString().toUpperCase().toCharArray()[e.getKeyLocation()]);
				} 
		}); 
    	
    	txtSenha.setBounds(340,350,170,20);
    	getContentPane().add(txtSenha);
    	txtSenha.addKeyListener(new KeyListener(){
			public void keyPressed(KeyEvent e)
			{
				if (e.getKeyCode() == (KeyEvent.VK_ENTER)) 
				{
					entrar();
				}
			}

			public void keyReleased(KeyEvent arg0){}

			public void keyTyped(KeyEvent arg0){				
			}});
    	
    	//ComboBox
    	
    	cboNome.setBounds(390,325,120,20);
    	cboNome.setBackground(Color.white);
    	getContentPane().add(cboNome);
    	
    	//Button
    	
    	btnOk.setBounds((((this.getWidth())/2)-110),400,110,20);
    	btnOk.setMnemonic(KeyEvent.VK_O);
    	btnOk.addKeyListener(new KeyListener()
    			{public void keyPressed(KeyEvent e){entrar();}
    			
    			public void keyReleased(KeyEvent e){}
    			
    			public void keyTyped(KeyEvent e){}
    			});
    	getContentPane().add(btnOk);
    	
    	btnCancel.setBounds((((this.getWidth())/2)),400,110,20);
    	btnCancel.setMnemonic(KeyEvent.VK_C);
    	btnCancel.addKeyListener(new KeyListener()
    			{public void keyPressed(KeyEvent e){quit();}
    			
    			public void keyReleased(KeyEvent e){}
    			
    			public void keyTyped(KeyEvent e){}
    			});
    	getContentPane().add(btnCancel);
    	
    	pnlLogin.setBackground(Color.WHITE);
    	
    	getContentPane().add(pnlLogin);
    }
    
    public void actionPerformed(ActionEvent e) 
	{
		if(e.getSource() == btnOk)
		{
			entrar();
		}	
		else if(e.getSource() == btnCancel)
		{
			quit();
		}
	}
    
    //Metodo para sair
    public void quit() 
    {
		System.out.println("Fechando Tela de Login");
		Banco.closeConnection();
		System.exit(0);
    }
    
    public void entrar()
    {
    	if (txtSenha.getText().equals(usuSenha)==true)
    	{
    		this.hide();
    		new MenuFrame(this);	
    	}
    	limparTela();
    }
    
    private boolean buscaFuncionario()
    {	
		boolean encontrado=false;
		try
		{
			cboNome.removeAllItems();
						
			ResultSet rs = Banco.Select("Usuarios","Cod_Usuario, usuNome, usuSenha, usuSalario, Cod_Profissao"," WHERE Cod_Usuario="+txtNumero.getText()+" ORDER BY usuNome");
						
			encontrado=true;
			
			while(!rs.isAfterLast())
			{
				cboNome.addItem(rs.getString("usuNome"));
				
				usuNome=rs.getString("usuNome");
				usuNumero=rs.getInt("Cod_Usuario");
				usuSenha=rs.getString("usuSenha");
				
				rs.next();
			}
		}
		catch(SQLException e)
		{
			encontrado=false;
			System.out.println(e);
		}   		
		return encontrado;
    }
    
    private void limparTela()
    {
    	txtNumero.setText("");
    	txtSenha.setText("");
    	cboNome.removeAllItems();
    	txtData.setText(Funcoes.formatDataNormal(data));
    	    	
    	txtData.requestFocus();
    	txtData.selectAll();
    }
    
	public static void main(String[] args) 
	{
		new Login();	
	}

	public void keyPressed(KeyEvent arg0) {}

	public void keyReleased(KeyEvent e) 
	{
		if (e.getKeyCode() == KeyEvent.VK_ESCAPE )
		{
 			quit();
		}
	}

	public void keyTyped(KeyEvent e) 
	{}

}

class panelLogin extends JPanel 
{
	Image img;
	URL url=getClass().getResource("/Picture/Login.jpg");
	
	panelLogin()
	{
		updateUI();
	}
	
	public void paint(Graphics g)
	{
		g.setColor(Color.WHITE);
		g.fillRect(this.getX(),this.getY(),this.getWidth()-1,this.getHeight()-1);
		
		if (url==null)
		{
			url=getClass().getResource("/Picture/Login.jpg");
		}
		else
		{			
			img=new ImageIcon(url).getImage();
			
			g.drawImage(img,((this.getWidth()/2)-(img.getWidth(this)/2)),this.getY()+100,this);
		}
	}
}
Criado 22 de junho de 2005
Ultima resposta 23 de jun. de 2005
Respostas 6
Participantes 4