Sair com a tecla "ESC"

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

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:

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:

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

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.

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

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)

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

}[/code]