Criar tecla de atalhos par JButton - (NetBeans)

Pessoal, tô querendo colocar teclas de atalho para Jbuttons, tipo Insert pra inserir um novo, delete pra excluir e coisa do tipo, quero sem alt e sem Ctrl.

Tem um monte de tópicos aqui falando sobre isso, mas nenhum mostra a melhor solução, tem um monte de coisas estranhas e um monte que não funciona.

Gostaria de saber se tem como implementar isso, e qual a melhor forma de fazer.

Ah, e no netBeans, tem lá algumas coisas sobre definir ação, mas não dá certo! Porque que isso acontece? Alguém que usa o NetBeans, sabe porque isso acontece? O que eu posso estar fazendo errado?

Se quiserem ver o código que o NetBeans gera, me peçam.

Já experimentou criar um evento keyListener no seu formulário?
Ele poderia interceptar os eventos e em seguida redirecionar para o componente/evento em questão. O que me diz?

:frowning: Parece que os forms só aceita ActionListener, Olha aí:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Listener telas.JInternalPaises$1@59e184cb is not of type interface java.awt.event.ActionListener

http://guj.com.br/posts/list/140986.java

da uma olhada… as vezes ajuda

[quote=dudu_sps]http://guj.com.br/posts/list/140986.java

da uma olhada… as vezes ajuda[/quote]

Ajudou muito!!!
Dá pra fazer com essa idéia sem problemas!!!
Pelo NetBeans ainda não consegui, só com Mnemonic mesmo, mas aí o usuário tem que usar o alt também, e não é exatamente isso que eu quero!

Mas estou tento um problema particulamente com o ESC, naum dá certo pra atalho de Cancelar, dêem uma olhada no código:

//Construtor do meu JFrame
        //Action Map
        ActionMap actionMap = getActionMap();
        actionMap.put("actionNovo", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
               if (cmdNovo.isEnabled()) cmdNovoActionPerformed(null);
            }
        });
        actionMap.put("actionSalvar", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                if (cmdSalvar.isEnabled()) cmdSalvarActionPerformed(null);
            }
        });
        actionMap.put("actionCancelar", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                if (cmdCancelar.isEnabled()) cmdCancelarActionPerformed(null);
            }
        });

        //Input Map
        InputMap inputMap = getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
        inputMap.put(KeyStroke.getKeyStroke("INSERT"), "actionNovo");
        inputMap.put(KeyStroke.getKeyStroke("ENTER"), "actionSalvar");
        KeyStroke key = KeyStroke.getKeyStroke("ESCAPE");//Quando dou um break aqui, a variável não está nula, ESCAPE pressed, ou algo do tipo
        inputMap.put(key, "actionCancelar");

Todas as outras ações estão funcionado, o ESC do meu teclado não está com problema :smiley: , e quando debugo o código a variável key tem um valor atribuído a ela!
Seria o sistema operacional que está fazendo alguma coisa com a tecla antes do actionMap saber que ela foi teclada? Alguém tem alguma idéia?