Evento teclado em JFrame

Pessoal, tenho uma aplicaçao, nessa aplicaçao tenho uma tela principal, essa tela é o inicio da aplicaçao, atraves dela vou chamar as telas secundarias…
Estou tentando usar evento de teclado na classe principal, ja joguei as classes necessarias e add o keyListener e mesmo assim nao consigo fazer o evento funcionar…esta ai o codigo, sera que alguem consegue indentificar o que esta errado?

import java.awt.Dialog;
import javax.swing.*;

import java.awt.event.;
import java.awt.
;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusListener;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.ParseException;
import java.util.*;

public class Principal extends JFrame implements ActionListener, KeyListener
{
JToolBar BarraFer;
JMenu gestao, vendas,compras, relatorios, financ, ajuda, consulta, altera;
JMenuItem pecaCad,pecaCons, clienteCad, clienteCons, estoque, venda, compra2, receber1, pagar, relatorio, ajuda1,sair,sobre, fornCad;
public JLabel l1,l2,l3,l4,l5;
JButton b,bpeca,bcliente,bentrada,bfinanc,brelatorio,bsair;
BorderLayout BL;

public Principal()//throws SQLException
{
	super();
	setTitle("Sistema SistRpeças");
	this.setExtendedState(MAXIMIZED_BOTH); //Maximinizando jframe do menu principal
    JPanel painel = new JPanel();
    painel.setBounds(10,10,300,300);
            
    BarraFer = new JToolBar();
    
    ImageIcon pecas = new ImageIcon("pecas2.jpg");
    bpeca = new JButton(pecas);
	bpeca.addActionListener(this);
	bpeca.setToolTipText("Cadastrar peças");
	BarraFer.add(bpeca);
	
	ImageIcon clientes = new ImageIcon("cliente.jpg");
    bcliente = new JButton(clientes);
	bcliente.addActionListener(this);
	bcliente.setToolTipText("Cadastrar Clientes");
	BarraFer.add(bcliente);
	
	ImageIcon financeiro1 = new ImageIcon("financeiro1.jpg");
    bfinanc = new JButton(financeiro1);
	bfinanc.addActionListener(this);
	bfinanc.setToolTipText("Baixar Contas à Receber");
	BarraFer.add(bfinanc);
	
	ImageIcon sair1 = new ImageIcon("sair1.jpg");
    bsair = new JButton(sair1);
	bsair.addActionListener(this);
	bsair.setToolTipText("Sai do SistRpeças");
	BarraFer.add(bsair);
	
    JMenuBar barra = new JMenuBar();
    //JMenu gestao = new JMenu("Gestão");
    //gestao.setMnemonic('A');
    
    ImageIcon Imagem = new ImageIcon("moto4.JPG");
    JLabel label = new JLabel(Imagem);
	label.setBounds(12,12,200,200);
	painel.add(label);
    
    gestao = new JMenu("Gestão");
    gestao.setMnemonic('G');
    pecaCad = new JMenuItem("Cadastrar Peças");
    gestao.add(pecaCad);
    pecaCad.addActionListener(this);
    pecaCons = new JMenuItem("Consultar Peças");
    gestao.add(pecaCons);
    pecaCons.addActionListener(this);
    clienteCad = new JMenuItem("Cadastrar Clientes");
    gestao.add(clienteCad);
    clienteCad.addActionListener(this);
    clienteCons = new JMenuItem("Consultar Clientes");
    gestao.add(clienteCons);
    clienteCons.addActionListener(this);
    fornCad = new JMenuItem("Cadastrar Fornecedores");
    gestao.add(fornCad);
    fornCad.addActionListener(this);
          
    sair = new JMenuItem("Sair");
    gestao.add(sair);
    sair.addActionListener(this);
   
    
    vendas = new JMenu("Vendas");
    vendas.setMnemonic('V');
    venda = new JMenuItem("Venda");
    vendas.add(venda);
    venda.addActionListener(this);
    
    compras = new JMenu("Compras");
    compras.setMnemonic('C');
    
    compra2 = new JMenuItem("Compra Nota Fiscal");
    compras.add(compra2);
    compra2.addActionListener(this);
           
    estoque = new JMenuItem("Entrada");
    compras.add(estoque);
    estoque.addActionListener(this);
    
    
    financ = new JMenu("Financeiro");
    financ.setMnemonic('F');
    
            
    receber1 = new JMenuItem("Baixar Contas à Receber");
    financ.add(receber1);
    receber1.addActionListener(this);
    
    /*receber = new JMenuItem("Baixar Contas à Receber");
    financ.add(receber);
    receber.addActionListener(this);*/
    pagar = new JMenuItem("Baixar Contas à Pagar");
    financ.add(pagar);
    pagar.addActionListener(this);
    
    relatorios = new JMenu("Relatórios");
    relatorios.setMnemonic('R');
    relatorio = new JMenuItem("Relatório");
    relatorios.add(relatorio);
    relatorio.addActionListener(this);
    
    ajuda = new JMenu("Ajuda");
    ajuda.setMnemonic('A');
    ajuda1 = new JMenuItem("Ajuda");
    ajuda.add(ajuda1);
    sobre = new JMenuItem("Sobre");
    sobre.addActionListener(this);
    ajuda.add(sobre);
    
    
    
    
    addKeyListener(this);
    //barra.add(arquivo);
    barra.add(gestao);
    barra.add(vendas);
    barra.add(compras);
    barra.add(financ);
    barra.add(relatorios);
    barra.add(ajuda);
    //barra.add(consulta);
    //barra.add(altera);
    setJMenuBar(barra);
    getContentPane().add("North",BarraFer);
    getContentPane().add(painel);
    painel.addKeyListener(this);
    //JPanel painelSenha = new JPanel();
    //painelSenha.setBounds(10,10,50,50);
    
}	

public static void main(String[] args) //throws SQLException
{
	
	/*Splash S = new Splash(1500);
	S.setVisible(true);
	S.show();
	S.BarraProgressao();
	S.ControlaTempo();*/	
	
	Principal P = new Principal();
	P.setVisible(true);
	P.show();

	
	}
	

public void actionPerformed(ActionEvent evt) 
{
	Object RecebeuEvento = evt.getSource();
	
	if (RecebeuEvento == sobre){
		Sobre s = new Sobre();
		s.setVisible(true);
		s.show(); 
		//JOptionPane.showMessageDialog(null,"deu Certo");
	}
	
	if((RecebeuEvento == pecaCad)||(RecebeuEvento == bpeca)){
		PecaCad p = new PecaCad();
		p.setVisible(true);
		p.show();
	}
	
	if(RecebeuEvento == pecaCons){
		PecaCons p1 = new PecaCons();
		p1.setVisible(true);
		p1.show();
	}
	
	if((RecebeuEvento == clienteCad)||(RecebeuEvento == bcliente)){
		ClienteCad c = new ClienteCad();
		c.setVisible(true);
		c.show();
	}
	
	if(RecebeuEvento == clienteCons){
		ClienteCons c = new ClienteCons();
		c.setVisible(true);
		c.show();
	}
	
	if(RecebeuEvento == fornCad){
		FornecedorCad y = new FornecedorCad();
		y.setVisible(true);
		y.show();
	}
	
	if(RecebeuEvento == estoque){
		Entrada E = new Entrada();
		E.setVisible(true);
		E.show();
	}
	
			
	if (RecebeuEvento == venda){
	Vendas v;
	try {
		v = new Vendas();
		v.setModal(true);
		v.setVisible(true);
	} catch (ParseException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	}
	
	if(RecebeuEvento == compra2){
		Compra t = new Compra();
		//t.setModal(true);
		t.setVisible(true);
		t.show();
	}
	
					
	if((RecebeuEvento == receber1)||(RecebeuEvento==bfinanc)){
		Receber r = new Receber();
		r.setVisible(true);
		r.show();
	}
	
	if(RecebeuEvento==relatorio){
		Relatorio r = new Relatorio();
		r.setVisible(true);
		r.show();
	}
	
	if((RecebeuEvento==sair)||(RecebeuEvento==bsair))
		dispose();
}



public void keyPressed(KeyEvent e) {
	if(e.getKeyCode()==KeyEvent.VK_F9){
		JOptionPane.showMessageDialog(null,"ajuda");
	}
	
}

public void keyTyped(KeyEvent e) {
	// TODO Auto-generated method stub
	
}

public void keyReleased(KeyEvent e) {
	// TODO Auto-generated method stub
	
}

}

Cara… joga o código no meio das tags “”… é só usar a barra de ferramentas aí em cima! :wink:
Sem identação fica difícil ler.

Abraços,

Marcos Antonio Campos Jordão’’

Insira este método no teu código. Neste exemplo, ao pressionar a tecla ESC do teclado, a janela se fechará.

:arrow: []'s

[code]protected JRootPane createRootPane() {

	KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
	JRootPane rootPane = new JRootPane();
	ActionListener actionListener = new ActionListener() {
		
		public void actionPerformed(ActionEvent actionEvent) {
                    //fechando a janela
                     setVisible(false);				
			
		}
	}; 
	
	rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);
	return rootPane;
	} 

[/code]

As vezes essas constantes dão erro mesmo…

Tenta pelo códico da tecla, assim:

[code]
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 116){
//Instruções Relativas…

    }

}[/code]

Eu concordo com o Carlos. A técnica que ele demonstrou é o uso de ActionMap e KeyMap. Esse tópico descreve como funciona:
http://www.guj.com.br/posts/list/47289.java#258583

blz, pessoal vou testar as dicas e qualquer coisa falo aqui…valeu

pessoal, resolvi o problema…achei uma soluçao um pouco mais facil, tirei o foco dos botoes (botao.setFocusable(false)), e tudo funcionou…valeu pelas dicas

pessoal, tem mais um problema, na minha tela principal, que so tem botoes eu tirei o foco dos botoes, assim o evento de teclado funcionou…mas tambem queria jogar esse evento nas outras telas…heis o problema: essas telas tem campos textFild, tentei tirar o foco deles mas isso os desabilita…
Aguem ai sabe se tem algum geito de tirar o foco dos jtextField e usa los normalmente???

Eu já estava esperando por essa sua mensagem desde que você postou a sua “solução”.

Se você pensar um pouco, verá que não tem como. Você está indo contra o conceito. Para o cursor ficar em cima de um TextField, ele deve estar no foco. Mas você proibiu o componente de ter foco.

Então, você está perguntando se dá para colocar o foco e editar um componente que não pode ter foco…

Esse é o problema da sua solução desabilitando o setFocusable. Para fazer teclas de atalho, volte a estudar os KeyMaps e ActionMaps ali em cima. A solução não só é mais reusável e menos trabalhosa, como também é mais elegante. Ela também vai te dar menos dores de cabeça. Quando vc inserir um novo textfield, não precisará alterar nenhuma propriedade dele, pois o ActionMap continua funcionando.

Entendi ViniGodoy, vou estudar KeyMap e ActionMap e jogar no meu codigo…por acaso voce tem algum exemplo ai que possa ajudar?? valeu