Problemas com atalhos entre as telas

Boa tarde galera, sou novo aqui no GUJ, então qualquer coisa me desculpem.
Estou com uns problemas na aplicação PDV que estou desenvolvendo no netbeans pra facul, fiz uma tela de venda com alguns atalhos pra facilitar pro usuario, de inicio funcionam bem, mas os problemas começam ( acho ) quando aciono o atalho das formas de pagamento que é aberto uma outra tela com mais atalhos ( até ai tudo bem … ), quando fecho esta tela ( das formas de pagamento ) os atalhos da tela de venda não funcionam, continua com os atalhos da tela de forma de pagamento. Não estou conseguindo achar o erro, se puderem me ajudar agradeço muito. Segue um trecho do codigo.

public Tela_ComprasVendas_Cadastrar_Venda() {
        initComponents();
        setLocationRelativeTo(null);
        //ABRIR COM TELA MAXIMIZADA
        setExtendedState(MAXIMIZED_BOTH);


        EventQueue queue = new EventQueue() {
            
            protected void dispatchEvent(AWTEvent event) {
                super.dispatchEvent(event);

                // o KeyEvent captura todos os eventos da tela, posição do mouse, teclas pressionadas, e etc
                // atraves do maskKey.
                // quando uma tecla é pressionada gera uma mask 
                String a[];
                String tecla[];

                //SE O EVENTO NÃO FOR VAZIO
                if (!event.paramString().equals("")) {
                    //IMPRIME OS 5 PRIMEIROS CARACTERES
                    
                    
                    
                    // SE OS 5 PRIMEIROS CARACTERES FOR = A KEY_P
                    if (event.paramString().substring(0, 5).equals("KEY_P")) {
                        //UTILIZA O METODO split QUE SEPARA AS STRING BASEADAS EM CARACTERES QUE NO CASO É A , (VIRG)
                        //POR EXEMPLO PEGA A LINHA ( KEY_PRESSED,keyCode=115,keyText=F4,keyChar=Indefinid...) E SEPARA
                        // NAS VIRGULAS ARMAZENANDO EM POSIÇÕES NO VETOR
                        a = event.paramString().split(",");
                        //UTILIZA O METODO split QUE SEPARA AS STRING BASEADAS EM CARACTERES QUE NO CASO É A = (IGUAL)
                        //POR EXEMPLO PEGA A LINHA (keyCode=115) E SEPARA
                        // NO IGUAL ARMAZENANDO EM POSIÇÕES NO VETOR
                        tecla = a[1].split("=");

                        switch (Integer.parseInt(tecla[1])) {
                            case 112: //F1
                                //BOTÃO SALVAR
                                Tela_ComprasVendas_FormaPagamento_Venda pag = new Tela_ComprasVendas_FormaPagamento_Venda();
                                pag.setVisible(true);
                                break;
                            case 113: //F2
                                JOptionPane.showMessageDialog(null, "Marcar na conta ....");
                                break;
                            case 114: //F3
                                try {
                                    Runtime.getRuntime().exec("calc.exe");
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                                break;
                            case 115: //F4
                                Tela_DadosMestre_Pesquisa_Clientes clientes = new Tela_DadosMestre_Pesquisa_Clientes();
                                clientes.setVisible(true);
                                break;
                            case 116: //F5
                                JOptionPane.showMessageDialog(null, "Pressionou F5!");
                                break;
                           
                            default:
                                break;
                        }
                    }
                }
            }
        };
        Toolkit.getDefaultToolkit().getSystemEventQueue().push(queue);
    }

E no construtor

public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Tela_ComprasVendas_Cadastrar_Venda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Tela_ComprasVendas_Cadastrar_Venda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Tela_ComprasVendas_Cadastrar_Venda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Tela_ComprasVendas_Cadastrar_Venda.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Tela_ComprasVendas_Cadastrar_Venda().setVisible(true);
            }
        });
        Toolkit.getDefaultToolkit().addAWTEventListener( new AWTEventListener()
		{
			public void eventDispatched(AWTEvent e)
			{
			}
        }, AWTEvent.KEY_EVENT_MASK);
        
    }

esta desta forma nas duas telas.

Outra duvida: Como anexo arquivos ? queria anexar a parte do projeto pra voces visualizarem melhor.

Obrigado.

Creio que a maneira mais interessante de você processar seus atalhos é usar Action’s. Funciona assim:

  • Você mapeia uma tecla (digamos, F2) a uma String identificadora;
  • E em seguida mapeia a String identificadora a uma Action.

Os detalhes estão explicados e exemplificados no tutorial da Oracle:

http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

Obrigado roger_rf.
Deu certo.