Como identificar o "enter" em um botão que está em um JOptionPane?

Pessoal,

Estou utilizando um objeto da classe JOptionPane para exibir uma mensagem e ele contém três botões (sim, não, cancelar).
Daí um dos botões fica com o foco e isso pode ser alterado dando um “TAB”, mas quando o usuário clica no “ENTER”, ele não faz nada, ou seja, ele não interpreta isso como uma execução do botão, já se o usuário clicar no “ESPAÇO” ele interpreta corretamente e o software continua normalmente.

O que devo fazer para que quando o usuário clicar “ENTER” ele execute aquela funcionalidade do botão correspondente? Como capturo isso?

Agradeço por qq ajuda.

Até +…
Paulo D.

Você terá que adicionar um KeyLister, que é o “cara” que vai ficar escutando os eventos que acontecem no teclado. De uma pesquisa que aqui no guj mesmo você vai achar alguns exemplos. E também tem a documentação da api http://java.sun.com/j2se/1.5.0/docs/api/java/awt/event/KeyEvent.html

Flw

Para que você possa fazer isso vc vai ter que criar seu própio diálogo, pois não há como interceptar o evento de um botão de um optionpane.

http://www.devx.com/tips/Tip/14318 diz o que pode ser feito em um JDialog ou JFrame; entretanto, um botão que tem o foco de um JOptionPane deve ser acionado com a barra de espaços, não com ENTER (infelizmente). Se precisar REALMENTE disso, talvez você tenha de fazer uma subclasse de JOptionPane que tenha o comportamento desejado.

O amigo David tem toda rezao
vc precisa criar seu proprio dialogo

faz assim
cria um novo jframe e faça com que ele se pareca como um dialog ai sim vc vai poder
ter controle total de teclas e eventos.

da pra ser melhorado… fiz correndo só pra testar a idéia do thingol

[code]import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

//by peerless
public class JOptionPaneWithEnterSupport extends JOptionPane {

/**
 * peerless
 */
private static final long serialVersionUID = 1L;

public JOptionPaneWithEnterSupport() {
        JPanel b = (JPanel) this.getComponent(1);
        final JButton acheiVoce = (JButton) b.getComponent(0);
        acheiVoce.addKeyListener(new KeyAdapter(){
        	@Override
        	public void keyReleased(KeyEvent arg0) {
        		if (arg0.getKeyCode() == KeyEvent.VK_ENTER)
        			acheiVoce.doClick();
        			
        	}
        });
}

public static void main(String[] args) {
	JOptionPaneWithEnterSupport o = new JOptionPaneWithEnterSupport();
	o.showMessageDialog(null, "teste");
}

}[/code]