Como utilizar o KeyPressed

Boa tarde pessoal,

estou com muita dificuldade em uma aplicação que estou criando. Fiz no netbeans uma janela JFRAME com um painel tabulado.

Agora preciso que quando o usuário tecle F7 seja habilitado um dos campos de texto deste painel.

O problema é: como adiciono este evento? Já tentei alguns exemplos que peguei aqui mesmo no fórum, mas nenhum deles funcionou.

Se alguém puder ajudar ficarei grato.

Swe vc fez pelo Netbeans designer o JFrame, basta vc clicar com o botão direito no frame, clicar em keyevent…ai vc vai la no código gerado, faz um if:

if(evt.getKeycode() == VK_ESC)
{
   this.dispose();
}

basta vc escolher qual tecla vc quer, usando as constantes VK_ …

Cara, você criou um evento para adicionar o seu código??? caso não, faz assim: se for uma jtextfield vá em propriedades e na guia selecione eventos e procure keypressed e clique em cima da seta para baixo e escolha a opção jtextfieldKeypressed, pronto agora voce criou um evento e foi direcionado para a parte do código, este evento serve para que toda vez que o usuário pressiona alguma tecla no campo seja ativado algum evento e ai o seu código será ativado, dei um exemplo com jtextfield mas pode ser utilizado em outros componentes.
Espero ter ajudado, alguma duvida ae da um grito!!!

Cara, procura por KeyAdapter
Nesse link o cara usa o KeyAdapter para capturar o evento de pressionar as teclas direcionais. Tente adaptar ao seu caso.
Abraço.

Uma maneira de fazer isso é criar uma Action, e depois associar essa Action a um KeyStroke. Segue um exemplo:

http://www.exampledepot.com/egs/javax.swing/KeyStrokes.html

Então pessoal,

tentei o exemplo do guilherme.dio, não funcionou.
Já o do mauriocionarcizo, eu criei um evento pro painel, pois preciso habilitar o jtextfield, então o usuário ainda não consegue digitar nada no jtextfield, porém mesmo criando um evento desse pro painel não funcionou.

Pessoal,

um colega acabou de me passar por e-mail um exemplo que funcionou aqui

segue abaixo:

KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_F7,0);

    Action actionListener = new AbstractAction() {
        @Override
        public void actionPerformed(ActionEvent evt) {
            
            if (!jTextField1.isEnabled()) {
                jTextField1.setEnabled(true);
                jTextField2.setEnabled(true);
            } else {
                jTextField1.setEnabled(false);
                jTextField2.setEnabled(false);
            }
        }
    };

    InputMap inputMap = this.getRootPane().getInputMap(
            JComponent.WHEN_IN_FOCUSED_WINDOW);
    inputMap.put(stroke, "ATIVA");

    this.getRootPane().getActionMap().put("ATIVA", actionListener);

Mas você colocou esse código onde?? No evento que eu te falei??? Ou Criou outro evento ou método?

Coloquei logo abaixo do initcomponets que o netbeans cria. No construtor.

[quote=rspricigo]Então pessoal,

tentei o exemplo do guilherme.dio, não funcionou.
Já o do mauriocionarcizo, eu criei um evento pro painel, pois preciso habilitar o jtextfield, então o usuário ainda não consegue digitar nada no jtextfield, porém mesmo criando um evento desse pro painel não funcionou.[/quote]

pq vc fez errado.

lembrando, que ao perder o foco do JFrame, o evento não será chamado!

Eu segui exatamente os passos que você falou. E não funcionou.
Por enquanto funcionou apenas o que o colega me enviou por e-mail.

Usar KeyPressed pode ser um problema, pois um componente pode “consumir” um pressionamento de tecla sem que você saiba, e portanto sua rotina não será executada. A técnica que seu amigo lhe passou por e-mail é a mesma cujo link postei anteriormente.

Exatamente isso roger.

Aproveitando o código que meu colega passou, e que o roger postou o link com outro exemplo. Pra quem tiver mais de um painel, como um TabbedPane e precisar que a mesma tecla faça coisas diferentes dependendo do painel que estiver em foco, basta criar o inputMap para o Painel ou componente desejado, e apos isso criar a ActionMap para o mesmo componente.

Segue Exemplo:

InputMap inputMap = SeuPainel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, “ATIVA”);
SeuPainel.getActionMap().put(“ATIVA”, objetoActionListener);

da outra forma o evento fica no RootPane, sendo assim em qualquer painel que estiver focado, o evento terá a mesma ação, segue abaixo:

InputMap inputMap = this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
inputMap.put(stroke, “ATIVA”);
this.getRootPane().getActionMap().put(“ATIVA”, actionListener);