Evento do teclado no JFrame[RESOLVIDO]

7 respostas
fwsales

Olá pessoal,
estou usando um JFrame e quando teclar uma determinada tecla, quero que ele faça algo, no caso do exemplo, exiba uma JOptionPane.
Com o código abaixo, funciona, o problema é se eu adiciono um JTextfield ou um JTable, não ocorre mais a exibição do JOptionPane. Como resolvo isso?

import javax.swing.JOptionPane;

public class TelaPrincipal extends javax.swing.JFrame {

    public TelaPrincipal() {
        initComponents();
        setLocationRelativeTo(null);
    }

@SuppressWarnings("unchecked")

private void formKeyPressed(java.awt.event.KeyEvent evt) {
         int tecla = evt.getKeyCode();
         if(tecla == 112){
             JOptionPane.showMessageDialog(rootPane, "F1");
         }else if(tecla == 113){
             JOptionPane.showMessageDialog(rootPane, "F2");
         }else{
             JOptionPane.showMessageDialog(rootPane, "Outra tecla");
         }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaPrincipal().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    // End of variables declaration

}

Para criar o evento pelo Netbeans fiz:
“Botao direito no JFrame > Eventos > Key > KeyPressed[formKeyPressed]”
No aguardo!

7 Respostas

R

aqui faltou o metodo initcomponentes para funcionar tudo.

quando usava acho que era só keypressed.
algo está errado, aí, pois o botão é independente das outras aparições.

fernandopaiva

fwsales:
Olá pessoal,
estou usando um JFrame e quando teclar uma determinada tecla, quero que ele faça algo, no caso do exemplo, exiba uma JOptionPane.
Com o código abaixo, funciona, o problema é se eu adiciono um JTextfield ou um JTable, não ocorre mais a exibição do JOptionPane. Como resolvo isso?

import javax.swing.JOptionPane;

public class TelaPrincipal extends javax.swing.JFrame {

    public TelaPrincipal() {
        initComponents();
        setLocationRelativeTo(null);
    }

@SuppressWarnings("unchecked")

private void formKeyPressed(java.awt.event.KeyEvent evt) {
         int tecla = evt.getKeyCode();
         if(tecla == 112){
             JOptionPane.showMessageDialog(rootPane, "F1");
         }else if(tecla == 113){
             JOptionPane.showMessageDialog(rootPane, "F2");
         }else{
             JOptionPane.showMessageDialog(rootPane, "Outra tecla");
         }
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TelaPrincipal().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    // End of variables declaration

}

Para criar o evento pelo Netbeans fiz:
“Botao direito no JFrame > Eventos > Key > KeyPressed[formKeyPressed]”
No aguardo!

Pesquise sobre KeyStroke…eh a melhor solucao.

t+ e boa sorte.

ViniGodoy

Um exemplo:

fwsales

Valeu pessoal!
Problema resolvido!
Resolução

ViniGodoy

fwsales:
Valeu pessoal!
Problema resolvido!

Isso não resolve o problema, pois as teclas registradas desse jeito valem para a aplicação toda, com ou sem o JFrame aberto.
Para teclas de atalho específicas, como é normal no Windows, use a forma que indiquei.

fwsales

Realmente Vini, das 7 telinhas que o sisteminha tem, não
havia percebido, pois só tem o esquema do F5 e F6 em uma tela. Agora pouco fiz questão de ver
ele executando método de outra janela fechada…
E não é que executou mesmo? Rs… Vou dar uma atenção ao
que você indicou antes. Só não estou conseguindo
implantar ele no meu sisteminha.

fwsales

Resolvido:
Aqui

Criado 6 de janeiro de 2012
Ultima resposta 8 de jan. de 2012
Respostas 7
Participantes 4