[RESOLVIDO] Erro ao fechar jDialog com a tecla Esc

Oie amigos, boa noite!
Estou com um probleminha, eu estou querendo fechar meus jDialogs com a tecla Esc.
Até aí tudo bem, está fechando tudo certinho, o problema é que por exemplo, eu tenho um cadastro de cliente, e uma pesquisa de cliente, se eu clico o esc na pesquisa, o dialog do cadastro que esta por tras tambem é fechado. Como posso resolver o problema?
Uso o seguinte codigo para fazer? Tem alguma coisa errada? Como fechar somente o dialog que esta em primeiro plano?
Obs.: Tentei colocar uma verificacao para ver se o dialog era o dono do foco com o metodo isFocusOwner mais nao resolveu, ele até fecha a primeira, mais se clico em esc novamente ele nao fecha, como se nunca dialog é o dono do foco, nao sei mais o que fazer, fiquei sem ideia. rsrsrs
Segue meu codigo

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
        Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
            @Override
            public void eventDispatched(final AWTEvent event) {
                if (event.getID() == KeyEvent.KEY_PRESSED) {
                    final KeyEvent evt = (KeyEvent) event;
                    if (verificaEsc == false) {
                        if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                            verificaEsc = true;
                            acaoSair();
                        }
                    }
                }
            }
        }, AWTEvent.KEY_EVENT_MASK);
    }               

Alguém pode me ajudar?
Obrigada!

Registre isso no seu rootPane (pode ser feito no construtor de suas janelas):

JRootPane rootPane = this.getRootPane(); KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); rootPane.registerKeyboardAction(actionListener, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);

Onde actionListener refere-se ao actionlistener que fecha a sua janela (provavelmente acaoSair).

Entretanto, eu desaconselho que você faça isso. Já usei isso num sistema as dores de cabeça não compensam. O recurso não traz nenhuma vantagem real ao usuário. Se um dos seus processos demorar e o usuário pressionar ESC para cancelar o processamento, ele terá o inconveniente de esperar o processamento terminar e a janela fechar logo depois que o que ele queria fica pronto. E isso para ele é BASTANTE frustrante.

Olá ViniGodoy, tudo bem?
Não consegui fazer funcionar…
Eu coloquei assim e realmente agora ele só fecha o frame, mais se clico no esc novamente com esse dialog somente aberto ele não fecha, simplesmente nao acontece nada.

JRootPane jRootPane = this.getRootPane();
KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
jRootPane.registerKeyboardAction(this.btnCancelar.getAction(), stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);

sendo que meu ActionListener:

btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });

e meu actionPerformed:

private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        this.dispose();
    }         

Obs.: Código gerado pelo Netbeans.
Estou colocando meu actionperformed de maneira errada?
Obrigada!

Tente colocar o ActionListener diretamente:

[code]ActionListener cancelAction = new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btnCancelarActionPerformed(evt);
}
};

jRootPane.registerKeyboardAction(cancelAction, stroke, JComponent.WHEN_IN_FOCUSED_WINDOW);[/code]

Eu uso esse código há anos, sempre funcionou bem.