JDialog

Tenho um JDialog com dois campos (login e senha) e dois botoes (Ok e Cancelar).

Gostaria que o botão OK fosse acionado pela tecla ENTER e o Cancelar pela tecla ESC independentemente de os botoes possuirem o foco ou nao.

Qual evento devo programar para dar esta funcionalidade.

KeyListener não resolve seu problema?

Até!

Para funcionar a tecla enter faça o seguinte:

this.getRootPane().setDefaultButton(buttonOK);

Para a tecla ESC faça o seguinte:

    protected JRootPane createRootPane() {
        ActionListener actionListener = new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                /* Coloque aqui a ação desejada. */
            } /* Finaliza o método actionPerformed. */
        }; /* Finaliza a classe interna abstrata ActionListener. */

        JRootPane rootPane = new JRootPane();
        KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);

        rootPane.registerKeyboardAction(actionListener, keyStroke,
                JComponent.WHEN_IN_FOCUSED_WINDOW);

        return rootPane;
    } /* Finaliza o método createRootPane. */

Gostaria de capturar o pressinamento do enter e do esc no nivel do JDialog, mas ja usei o seguinte codigo no KeyTyped, KeyPressed e KeyReleased:

if (evt.getKeyCode()==evt.VK_ENTER) login();

e nenhum funcionou.

KeyListener não resolve o problema. Você precisa usar uns truques com InputMap, ActionMap e KeyStroke.

http://www.exampledepot.com/egs/java.awt/focus_WindowFocus.html?l=rel
http://www.exampledepot.com/egs/java.awt/focus_ChildFocus.html

vc adicionou o evento nos seus TextField??

SEUTEXTFIELD.addKeyListener( this );